节选自《C语言深度剖析》
首先看个例子
main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); // 2 5 }
&a: 取数组a的首地址,&a之后+1,是加一个数组的长度,此处是+1*5*sizeof(int),即指向下一个数组首地址 。
a: 数组首元素的首地址,即a[0]的首地址,a+1是加一个元素的长度即 sizeof(int)。
节选自《C语言深度剖析》
首先看个例子
main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); // 2 5 }
&a: 取数组a的首地址,&a之后+1,是加一个数组的长度,此处是+1*5*sizeof(int),即指向下一个数组首地址 。
a: 数组首元素的首地址,即a[0]的首地址,a+1是加一个元素的长度即 sizeof(int)。