https端口号:在C语言里面,&a[0]++和&a[0]+1分别表示什么意思?

来源:百度文库 编辑:高考问答 时间:2024/04/29 21:30:29
在C语言里面,&a[0]++和&a[0]+1分别表示什么意思?

最好能举个例子说明

&a[0]++;是错误语句,编译都不会过。因为++是后++,在执行该语句时是不计算的,所以a[0]++是个表达式而不是值,显然用&取一个表达式的地址是非法操作!而如果是&++a[0];则是正确的,因为前++在执行&时已经计算过了:就是先给a[0]+1,然后再取a[0]的地址。
&a[0]+1;是正确语句,因为&的优先级比+高,所以是先取a[0]的地址再给这个地址+一个元素所占字节数——就是说&a[0]+1是a[1]的地址。

这要看你要说的是一维数组还是二维数组了,如果是一维,答案同atchoo,要补充的是,向前移动的是数组数据类型所占的内存空间,比如是int,就移动2个单元;如果是二维,
a[0]表示第一行首地址,&a[0]表示第一行第一列首地址,&a[0]++就是把第一行第一列的元素加1.

a[0]表示数组a 的第一个元素,
&a[0]是取a[0]在内存中的地址
&a[0]++是将a[0]在内存中的地址向前移动一个单位.

理论上&a[0]+1和&a[0]++的执行效果是差不多的

不一样!
++的优先级比&高,&比+高!
所以&a[0]++是进行a[0]=a[0]+1之后,在取a[0]的地址
而&a[0]+1是先取a[0]的地址,然后将指向这个地址的指针(假设int *p;p=&a[0];)移动一个数据长度,即指向了a[1];

&a[0]++
就是
{
*p;定义类型没有写
a[0]+=1;
p=&a[0];
}
&a[0]+1
就是
{
*p;定义类型没有写
p=&a[0]
p++;
}

&a[0]++表示程序运行时会对运行结果自加1
&a[0]+1表示程序运行时对结果加上1,如果改为2就会加上2