C指针问题迷惑中,(*p)[4]和*p到底有什么区别?

自学,谭浩强的C语言书,多维数组指针变量,设有一个二维数组a[3][4],下面是书中原话:“(2)指向由m个元素组成的一维数组的指针变量。上例的指针变量p是指向整型变量的... 自学,谭浩强的C语言书,多维数 组指针变量,设有一个二维数组a[3][4],下面是书中原话:“(2)指向由m个元素组成的一维数组的指针变量。 上例的指针变量p是指向整型变量的,p+1所指向的元素是p所指向的下一元素。可以改用另一方法,使p不是指向整型变量,而是指向一个包含m个元素的一维数组。这时,如果p先指向a[0](即p=&a[0]),则p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,见图10.28。”————看到这里,似乎说的是p指向的是二维数组a[3][4]的每一行的第一个位置,书中前面举出了一个排长、班长、列兵的例子,那么这里p应该是充当了排长的角色而指向的是班长吗?那么下面又给出了这样一个例子:main(){int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int (*p)[4],i,j;p=a;scanf("i=%d,j=%d\n",i,j,*(*(p+i)+j));}运行情况如下:i=1,j=2 /*回车*/a[1,2]=13/*程序第3行 int (*p)[4] 表示p是一个指针变量,它指向包含4个元素的一维数组。*/————一个问题就是,为什么要用(*p)[4]这种方式呢?用一个*p,依次指一行中的每一元素,不是一样可以解决问题吗?(*p)[4]到底是什么意思?一开始认为它是一个数组,但书上意思却又说它不是。以上说得比较多,也不知道大家看明白了没有,总之是感觉很迷惑,还望各位老师及师兄能一一给予详细的解答。多谢。 展开
 我来答
1035153931
2010-09-27 · 超过31用户采纳过TA的回答
知道答主
回答量:126
采纳率:0%
帮助的人:0
展开全部
(*p)[4] p的含义是一个指向包含四个元素的数组的指针
*p p的含义是一个指向数的指针
指向数和指向数组是不一样的概念。

为什么要用(*p)[4]这种方式呢?用一个*p,依次指一行中的每一元素,不是一样可以解决问题吗?

对*p,p此时相当于一个一维数组,
但是对(*q)[4],q相当于一个二维数组,第二维的大小是4。
p[x]是一个数
q[x]却相当于一个一维数组,该一维数组的起始地址是q+x*4

所以加入p,q指向同一个地址,区别就是
p[0]==q[0][0],p[4]==q[1][0]....
此时q可理解为指针的指针,q[x]是指针。所以q[x]与p是同种的指针。。
所以q的引用会更清楚一点,它可将一维数组用二维的方式来引用。
就说这么多吧,睡觉了,希望有帮助。。。。
自学C的时候,我指针这一章弄晕了,最后搞得我在那一周看到C教材就恶心。。一周没看过书。。。。。
cdkrr
2010-09-27 · TA获得超过354个赞
知道小有建树答主
回答量:355
采纳率:0%
帮助的人:344万
展开全部
(*p)[4] p的含义是一个指向包含四个元素的数组的指针
*p p的含义是一个指向数的指针

-----------------------------------------------------------
我有一个资料叫:《让你不再害怕指针》,看完之后你就会明白怎么回事。

其实指针那一章千万别看谭的教材,越看越迷糊。

如果需要可以在线联系我。或者留言。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式