- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a[3]={1,2,3};
- int *p=(int*)(&a+1);//强制类型转换
- printf("%d\n",*(p-1));
- return 0;
- }
复制代码
可能好多人对此有疑问, 大家都知道常量是不能进行取地址& 运算的 比如 &5, 可是既然数组名 a 是一个指针常量,为何可以对a 进行&a呢?
首先 a == &a == a[0] ,相比大家都是知道的.都等于首元素地址值. 可是 &a+1 a+1 &a[1] 呢?
&a 取得的时一个行指针, &a+1 所以跨越一行, 对于一维数组,那就是数组后面的地址. 比如上面代码, 定义一个指针 p, 这里必须使用强制类型转换,把行指针转换为普通指针. 又因为跨越了一行,所以 *(p-1)对应的就是 3:victory:
|
|