可能重复:
Lvalue required error
我的C程序出错了
main () {
int arr[] = {1, 2, 3, 4};
printf("%d", *arr);
arr++;
printf("%d", *arr);
}
当我编译这段代码时,我得到左值所需的错误。对于带有arr ++ 的行。 任何帮助!
答案 0 :(得分:5)
arr
是一个常量,你不能改变它的值。您可以添加
int *p = arr;
然后做一个
p++;
答案 1 :(得分:3)
您的问题是arr
是一个数组而数组不是左值。你需要一个指针。
int arr[] = {1, 2, 3, 4};
int *p = &arr;
printf("%d", *p);
p++;
printf("%d", *p);
答案 2 :(得分:2)
lvalue
通常是指赋值(=)运算符左侧的值。由于arr++
是arr = arr + 1
的简写,这就是它所指的内容。
基本上,arr作为一个数组,并且不支持更改数组的值。我想你想要一个指向数组的指针。指针可以按照代码尝试的方式递增。
答案 3 :(得分:1)
arr
是常数,你无法改变它的价值。
保持简单,以这种方式访问数组:
int main (int argc, char *argv[]) {
int arr[] = {1, 2, 3, 4};
printf("arr[0] == %d\n", arr[0]);
printf("arr[1] == %d\n", arr[1]);
printf("arr[2] == %d\n", arr[2]);
printf("arr[3] == %d", arr[3]);
return 0;
}
我推荐关于左值和右值的this文档。
而且,这个c-faq关于“数组不是指针”。
答案 4 :(得分:1)
++
和--
的前后版本的操作数必须是可修改的左值。不幸的是,arr
之类的数组表达式是非 - 可修改的左值,因此是您的错误消息。
如果要使用指针表达式遍历数组,则必须声明第二个指针并将其设置为指向数组的第一个元素。
int *p = arr; // or &arr[0] - in this context they evaluate to the same thing