可能重复:
需要左值错误
我的 C 程序有错误
main () {
int arr[] = {1, 2, 3, 4};
printf("%d", *arr);
arr++;
printf("%d", *arr);
}
当我编译这段代码时,我得到 lvalue required 错误。对于带有 arr++ 的行。任何帮助!
arr
是一个常数,你不能改变它的值。您可以添加一个
int *p = arr;
然后做一个
p++;
您的问题是这arr
是一个数组,而数组不是左值。你需要一个指针。
int arr[] = {1, 2, 3, 4};
int *p = &arr;
printf("%d", *p);
p++;
printf("%d", *p);
lvalue
通常指赋值 (=) 运算符左侧的值。既然arr++
是 的简写arr = arr + 1
,那就是它所指的。
基本上,arr 是一个数组,不支持更改数组的值。我想你想要一个指向数组的指针。指针可以按照您的代码尝试的方式递增。
The operand of the pre- and postfix versions of ++
and --
must be a modifiable lvalue. Unfortunately, array expressions such as arr
are non-modifiable lvalues, hence your error message.
If you want to walk the array using a pointer expression, you'll have to declare a second pointer and set it to point to the first element of the array.
int *p = arr; // or &arr[0] - in this context they evaluate to the same thing
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;
}
我推荐这个文档用于左值和右值。
而且,这个关于“数组不是指针”的c-faq 。