关于c语言列指针

关于c语言列指针第一,这个nij都是具体数,&p[具体数]能表示列地址吗(划线的那个)第二,这个传递的是第0行0列的地址,怎么能表示列指针,或者说跟列指针怎么有关系第三,... 关于c语言列指针第一,这个n i j都是具体数,&p[具体数]能表示列地址吗(划线的那个)
第二,这个传递的是第0行0列的地址,怎么能表示列指针,或者说跟列指针怎么有关系
第三,可不可以稍微详细讲一下列指针怎么传递给函数。
表示思绪有点乱,求大佬们帮帮忙,小弟十分感谢。
展开
 我来答
匿名用户
2018-03-11
展开全部

int二维数组在内存中没有所谓的列, 它是一段"连续"的内存空间,

正因为是连续的, 所以才要用p[i*n+j]来寻址

苦瓜它不苦
2018-03-11 · TA获得超过211个赞
知道小有建树答主
回答量:334
采纳率:70%
帮助的人:73万
展开全部
首先第一点,a是个数组,而且还是个二维数组,那么数组特性你应该清楚吧,就是成员地址是连续的,3*4 = 12,又因为是int类型,表示这个数组有12个4字节连续的地址作为储存空间,用来储存数据。
p是个指针,它用来储存内存地址单元,因为是一级指针,一般用来指向一维数组 或 变量。
二维数组,我们通常来讲,是将其看作一个平面,即xy纵横轴,来学习的,前面一个下标表示x,后一个下标表示y,而下一行的开始既上一行最后一个元素的地址+一个类型字节(这里即+1,表示4字节),既然如此,完全可以将下一行的开始并接在上一行的末尾,这样一来,不就是一维数组了吗?
那么p既然指向第一个元素的地址,p+1不就是表示第二个元素的地址吗?p+2不就是第三个元素的地址吗(注意,是p+1\p+2而不是p++,所以p依然还是指向a[0][0])?p+3...p+4...p+5....等等一直到p+11不就是a[2][3]的地址了吗? 这个理解吧? 要是还不理解,就自己画个图,假设首元素内存地址是0x0000,按照xy纵横轴画一次,按照首尾拼接画一次,并且标上地址。
第一个问题答案就在上面。
第二个问题:也在上面,这是指向一维数组的指针的解释。
通常情况下:一般情况下,声明指向二维数组的指针是:int (*p)[4];

p[][4] == p[3][4] == a[3][4];
用指向二维的指针表示:
p[0][0] == a[0][0],p[1][0] == a[1][0],p[2][0] == a[2][0]
p[0] == a[0] p[1] == a[1] p[2] == a[2]
用指向一维的指针表示:
p[0] == a[0][0] p[3] == a[0][3]
p[4] == a[1][0] p[7] == a[1][3]
p[8] == a[2][0] p[11] == a[2][3]
至于第三个问题,你如果完全理解了前两个解释,那么第三个问题也就不存在了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式