代码在编译过程中出错,请解释

时间:2016-12-03 18:15:53

标签: c arrays pointers

#include <stdio.h>

int main(void) {
    int values[10];
    int a = 10;

    values = &a;
    printf ("the value is = %i.\n\n", *values);

    return 0;
}

这段代码是为了试验指针而编写的,我刚开始学习它。 我的问题是,如果数组的名称是指针,那么为什么我们不能将其他变量的地址复制到其中。

它给出的错误是&#34;赋值给表达式的数组类型&#34;

请以简单的方式解释。

2 个答案:

答案 0 :(得分:1)

数组指示符是不可修改的左值。您不能在赋值表达式的左侧使用数组指示符。

因此编译器会为此语句发出错误

 int values[10];

 int a = 10;

 values = &a;
 ^^^^^^^^^^

答案 1 :(得分:1)

无法分配数组。您可以将值存储到数组元素中,并且可以将数组地址存储到指针中,但数组本身不能出现在赋值运算符的左侧。

您可以将values更改为指针:

#include <stdio.h>

int main(void) {
    int *values;
    int a = 10;

    values = &a;
    printf ("the value is = %i.\n\n", *values);

    return 0;
}

或者您可以将a存储到values[0]

#include <stdio.h>

int main(void) {
    int values[10];
    int a = 10;

    values[0] = a;
    printf ("the value is = %i.\n\n", *values);

    return 0;
}

将阵列视为停车场:

  • 您可以将汽车存放在停车位(数组元素)
  • 您可以在一张纸上写下批号(批次指针,您可以通过将其交给运营商来检索车辆。)
  • 您不能停车场存放到另一个停车场,它们不可移动。