int main() { int a[4]={0,1,2,3}; int (*p)[4]=&a; cout<<p<<endl; cout<<*p<<endl; return 0; }


为什么p和*p的输出都一样?
关健是这伍指条语句:int (*p)[4]=&a;
这个是一个数组指针,可以这样分析:
看变量p ,先与*结合说明 p是一个指针,然后(*p)再与[]结合 说明指针指向的是一个数组
[4]说明p指向的这个数组含有4个元素
最后和int结合说明p是一个数组指针,它指向一个拥有4个元素的整型数组
而在定义的同时对其初始化&a也就是把a的地址给了p,相当于p指向了a
这样*p的指就是p所指向的内存地址中轮渗的址,由于它是一个数组指针,它指向的内存单元中存放的仍然是一个地址,在此即腊橘脊为a的地址。
而p的话由于p指向了a,因此p的值也是a的地址。
你仔细想想其它两者有区别,虽然数值都一样,但p代表着存放p这个内存单元中存放的值,而*p呢是它指向的内存地址中存放的值。
至于还有个&p就是p的存放地址了,这个和p和*p都没关系
输出:2
p=&a[1][1];
for(i=0;i<4;i++) p[i]=i+1;这空余液两行语句表示对二维数组a的部分内容进行初始化化,值为i+1,初始化之后数组的内毁缺容为:
0 1 2
0 x x x
1 x 1 2
2 2 4 x
所以printf("%d\n",a[1][2]);的输出值为2
另外,站长团上有产品团斗物购,便宜有保证
因为那是数组,输出来的都是数组的首地址,。
*P是指针,指向的是P。当然输出的是P的值