C语言数组赋值问题

时间:2022-12-28 16:53:43
C语言数组赋值问题,第四行输出lvalue required as left operand of assignment,如果a[n] == *(a+n),那这样为数组元素赋值为什么不可以?求解释。
int a[3] = {1, 2, 3};
int t = *a+1;
printf("%d\n", t);
*a+1 = 3;
printf("%d", *a+1);

4 个解决方案

#1



*a+1 = 3; //这样是不行的
//赋值运算的左操作数必须是左值

#2


a[n] == *(a+n)。a是数组的首地址,a + n指向数组后面n个a数组长度的地址。
用个图比较容易说明吧
如你所写的,a有三个元素,a + 1 就指向 a的最后一个元素的末尾了
C语言数组赋值问题

#3


a[n] == *(a+n)赋值没错,你少了括号,应该是:*(a+1) = 3; *比+优先级强,会先计算*a,所以会出现那样的提示。

#4


引用 2 楼 hai200501019 的回复:
a[n] == *(a+n)。a是数组的首地址,a + n指向数组后面n个a数组长度的地址。
用个图比较容易说明吧
如你所写的,a有三个元素,a + 1 就指向 a的最后一个元素的末尾了
C语言数组赋值问题

a+n应该是指向a后面n个数组元素类型长度的地址吧,a+1,a+2,a+3对应1,2,3

#1



*a+1 = 3; //这样是不行的
//赋值运算的左操作数必须是左值

#2


a[n] == *(a+n)。a是数组的首地址,a + n指向数组后面n个a数组长度的地址。
用个图比较容易说明吧
如你所写的,a有三个元素,a + 1 就指向 a的最后一个元素的末尾了
C语言数组赋值问题

#3


a[n] == *(a+n)赋值没错,你少了括号,应该是:*(a+1) = 3; *比+优先级强,会先计算*a,所以会出现那样的提示。

#4


引用 2 楼 hai200501019 的回复:
a[n] == *(a+n)。a是数组的首地址,a + n指向数组后面n个a数组长度的地址。
用个图比较容易说明吧
如你所写的,a有三个元素,a + 1 就指向 a的最后一个元素的末尾了
C语言数组赋值问题

a+n应该是指向a后面n个数组元素类型长度的地址吧,a+1,a+2,a+3对应1,2,3