int a[]={1,2,3};
int *p;
p = (int *)(&a+1); // = 两边的数据类型需一致
printf("%d\n", *(a + 1) ); //输出语句 1
printf("%d\n", *(p - 1) ); //输出语句 2
问题:输出语句 1、2分别输出什么?
分析:
数组名 a :代表数组的首元素的首地址
取数组名 a的地址(&a):同样是首元素的首地址,但是,它与 a 的意思远不一样!虽然值一样。
&a 是整个数组的起始地址,所以 +1 操作的话,就是等于 + sizeof( a ),即&a + 5 * sizeof( int )
a 是首元素的首地址,所以 +1 操作的话,就是等于 + sizeof( int )。
从以上的分析,我们可以总结出,在进行 +1 的时候,我们要注意是谁进行 +1 。通过下面的一个例子会再次强调这点。
数组指针:
我们这里讨论的是