内容会持续更新,有错误的地方欢迎指正,谢谢!
例1:下面程序的输出结果是:
#include<iosteam.h>
void main()
{
int n[][3] = {10,20,30,40,50,60};
int (*p)[3];
p=n;
cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;
}
解析:
p是一个指针,一个指向长度为3的数组的指针。直接在p上偏移就是行,在*p上偏移就是列。比如:**(p+1)等价于p[1][0]等于40;*(*p+1)等价于p[0][1]等于20。
所以,上面这道题中p[0][0]=10,*(p[0]+1)=20,(*p)[2]=30。
例2:以下代码输出什么?
main()
{
int a[5]={1,2,3,4,5};
int *p=(int *)(&a+1);
printf("%d",*(p-1));
}
解析:
&a是一个指向大小为5的数组的指针,那么&a+1就表示指向下一个大小为5的数组的指针,那么p也就是指向下一个大小为5的数组的指针,*(p-1)自然就是5啦~