读书人

有关quot;Lvalue required in function ma

发布时间: 2012-02-29 16:44:10 作者: rapoo

有关"Lvalue required in function main"的疑问
程序1:
main(int argc, char *argv[]){
FILE *fr;
fr = fopen(*++argv, "r");
}


程序2:
main(){
char *argv[] = {"hello", "world!"};
printf("%s\n", *++argv);
}

问题:程序1中 *++argv 可以正常使用,但是程序2中 *++argv 编译时候报错 “Lvalue required in function main”,请问这是为什么?

新手刚进门,各位大侠多指点!谢了先~

[解决办法]
char *argv[] = {"hello", "world!"};

argv看起来是个局部变量,但由于对它进行了初始化,实际上相当于是指向某内存的一个常量指针,++argv就意味着移动这个指针,所以错误,如果:

main(){
char *argv[] = {"hello", "world!"};
char **p = argv;
printf("%s\n", *++p);
}
就不会出现错误了。
[解决办法]
注意一个是函数参数,一个是局部变量。

arg 形式看起来是一个数组,
对于数组,是无法 ++ 操作的,
所以 第二个是有问题的。

数组名作为参数传递的时候,
数组名会退化为指针,指针是可以 ++的,
所以,第一个没有问题

读书人网 >C语言

热点推荐