C编程;需要左值

时间:2012-02-27 17:11:22

标签: c pointers lvalue

  

可能重复:
  Lvalue required error

我的C程序出错了

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

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

5 个答案:

答案 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