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的最后一个元素的末尾了
用个图比较容易说明吧
如你所写的,a有三个元素,a + 1 就指向 a的最后一个元素的末尾了
#3
a[n] == *(a+n)赋值没错,你少了括号,应该是:*(a+1) = 3; *比+优先级强,会先计算*a,所以会出现那样的提示。
#4
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的最后一个元素的末尾了
用个图比较容易说明吧
如你所写的,a有三个元素,a + 1 就指向 a的最后一个元素的末尾了
#3
a[n] == *(a+n)赋值没错,你少了括号,应该是:*(a+1) = 3; *比+优先级强,会先计算*a,所以会出现那样的提示。
#4
a+n应该是指向a后面n个数组元素类型长度的地址吧,a+1,a+2,a+3对应1,2,3