int main() { int a[4]={0,1,2,3}; int (*p)[4]=&a; cout<<p<<endl; cout<<*p<<endl; return 0; }
4个回答
展开全部
关健是这条语句: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都没关系
这个是一个数组指针,可以这样分析:
看变量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都没关系
2011-07-27
展开全部
输出: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=&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的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询