&a是数组的首地址,但&a+1又是什么意思,结尾的*(p1-4)又为什么会输出 8 呀
(在下C语言入门,望大家指教)
#include<stdio.h>
int main()
{
int a[3][4] = {{1,2,3},{4,5},{8,1}};
int *p1 = (int *)(&a+1);
printf("%d\n",*(p1-4));
return 0;
}
&a是数组的首地址,但&a+1又是什么意思,结尾的*(p1-4)又为什么会输出 8 呀
(在下C语言入门,望大家指教)
#include<stdio.h>
int main()
{
int a[3][4] = {{1,2,3},{4,5},{8,1}};
int *p1 = (int *)(&a+1);
printf("%d\n",*(p1-4));
return 0;
}
&a 取数组首地址
(&a+1) 取数组末尾元素之后的地址,即首地址向后偏移整个数组后的地址
p1-4 倒数第四个元素
同理,下面的结果是一样的
(&a+2) ,p1-16
(&a -1) ,p1 +20