CD不加&,是因为他们俩 表示数组名,就等同于地址了,不需要再加地址符。 scanf在用的时候后面 可以直接写数组名,也可以写地址符加数组名加数组元素个数。 AB明显不对,他俩越界了。
C表示第一次循环的时候是 第5个元素的地址,但是随后m值又自加1,所以第二次循环的时候还是5, D表示第m个元素的地址。
for里有改变m的m--
所以不需要++
排除 AC
m 从 N-1 到1
m+1是 N到2
长度N的数组 下标是 0 ~ N-1
x[m+1] 即x[N] 就越界了
&x[m]这个知道吧
其实它等价于x+m
而且在编译的时候就是将&x[m]转化为x+m
当然这样也可以&m[x], 是不是很怪,看了上面的转化,再想想这样用,其实也是可以的。
x是指针,int型的 故x+m是以x当前所指地址向后偏移m*4个字节,这里的是是sizeof (int)来的
学会指针,理解这会比较容易的。
x为数组名,代表x[0]的地址,x+(m++)即x[m++]的地址,x+m即x[m]的地址