1

可能重复:
需要左值错误

我的 C 程序有错误

main () {
    int arr[] = {1, 2, 3, 4};
    printf("%d", *arr);
    arr++;
    printf("%d", *arr);
}

当我编译这段代码时,我得到 lvalue required 错误。对于带有 arr++ 的行。任何帮助!

4

5 回答 5

5

arr是一个常数,你不能改变它的值。您可以添加一个

int *p = arr;

然后做一个

p++;
于 2012-02-27T17:13:56.563 回答
3

您的问题是这arr是一个数组,而数组不是左值。你需要一个指针。

int arr[] = {1, 2, 3, 4};
int *p = &arr;
printf("%d", *p);
p++;
printf("%d", *p);
于 2012-02-27T17:14:57.140 回答
2

lvalue通常指赋值 (=) 运算符左侧的值。既然arr++是 的简写arr = arr + 1,那就是它所指的。

基本上,arr 是一个数组,不支持更改数组的值。我想你想要一个指向数组的指针。指针可以按照您的代码尝试的方式递增。

于 2012-02-27T17:15:39.067 回答
1

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
于 2012-02-27T18:32:55.577 回答
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;
}

我推荐这个文档用于左值和右值。

而且,这个关于“数组不是指针”的c-faq 。

于 2012-02-27T17:18:10.720 回答