int (*p)[3]指针的指向问题

目前书上有3个说法有inta[3]intb[3][2],int(*p)[3]可以指向一维数组,如int(*p)[3]=&a(不是a)3表示有3个整数;int(*p)[3]... 目前书上有3个说法 有int a[3] int b[3][2],int(*p)[3] 可以指向一维数组,如int(*p)[3] =&a(不是a)3表示有3个整数;int(*p)[3] 可以指向二维数组,如int(*p)[3] =&b 3表示二维数组有3个行也就是3个一维数组;int(*p)[2] 可以指向二维数组中的某个一维数组,如int(*p)[2] =&b[0] 在这种情况下可以用*(p[i]+j)或*(*(p+i)+j)表示某个元素(这里不能用3了 不好改前面的话了 就在这换一下吧)2表示二维数组的第一个一维数组的两个整数。请问这三种说法都正确吗 麻烦懂的说说给个正解 谢了 展开
 我来答
paniarch
2013-08-23 · TA获得超过288个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:147万
展开全部
你的3个说法我没断好句啊。。。按我的理解解释一下p指针吧,再自己判断那3个说法。
int a[6];
int b[2][3];
int c[3][2];
int (*p)[3];
这里p是一个指针,这个指针指向的区域有3*sizeof(int)大小。
p = &a; p = b; p=c; 编译器都不会报错。
p = &a的情况,p[0][0] == a[0], p[1][0] == a[3],可以认为是把线性数组二维化。
p = b的情况,p跟b可以认为是等价的。
p = c的情况,这个基本上可以认为是把数组的行数和列数调换,具体内容不变。

为了少费点脑细胞,尽量使用p = b;其他两个没有特别的算法要求不建议使用。
记住了指针指向区域的大小后,这样就能清楚每个操作具体的内存位置,然后该怎么用就怎么用吧。
更多追问追答
追问
p[1][0]是 a[2]吧? 另外 p能指向二维数组吗 p=&b
追答
p指向区域的大小是3*sizeof(int),p++以后,指向的区域会移动3*sizeof(int),也就是a[3]了。
p指向二维数组的赋值不需要再取地址了,直接p=b就可以了。
道行自在行2745
2013-08-23 · TA获得超过543个赞
知道答主
回答量:86
采纳率:0%
帮助的人:44.6万
展开全部
只要是指针- -指向什么并没有大什么关系吧,主要是指针的类型和所指的类型相同就可以,int (*p)[3],和int p[][3],一样- -.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式