![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
求c语言指针方式引用二维数组问题
如图所示先说明,这个方法我们没学过,从开始就不知道原理了为什么a和*a都是地址啊,能详细说明原理吗,说一四五就可以,谢谢...
如图所示
先说明,这个方法我们没学过,从开始就不知道原理了
为什么a和*a都是地址啊,能详细说明原理吗,说一四五就可以,谢谢 展开
先说明,这个方法我们没学过,从开始就不知道原理了
为什么a和*a都是地址啊,能详细说明原理吗,说一四五就可以,谢谢 展开
3个回答
展开全部
就按照你举的例子来说:
a[2][3]={0,1,2,3,4,5}
这时形成一个二维数组,元素是:
a[0][0]=0,物理地址&a[0][0]
a[0][1]=1,地址&a[0][0]+1
a[0][2]=2,地址&a[0][0]+2
a[1][0]=3,地址&a[0][0]+3
a[1][1]=4,地址&a[0][0]+4
a[1][2]=5,地址&a[0][0]+5
分配存储空间时,系统把每3个数据作为一组,组名记a[0]、a[1],这两个值分别是每组第一个元素的地址,即a[0]=&a[0][0],a[1]=&a[1][0]。
所以:
a指向数组首元素的地址,a=&a[0][0];
a[0]代表第一组首元素地址,当然,a[0]也指向数组首元素的地址,a[0]=&a[0][0];
*a是对a取值,它取出的是a[0],当然=&a[0][0];
&a[0]指a[0]的地址,还是它自己,所以&a[0]=&a[0][0]。
所以,第一行个打印语句输出的5个内容都是一样的,所以,输出5个19ff0c。是a[0][0](元素0)的储存位置。
第二个打印语句输出的5个内容也是相同的,都是19ff18。它们是a[1][0](元素3)的存放位置,19ff0C+3×4=19ff0c+12=19ff0c+c=19ff18。
后面也是类似解释。
具体p1、p2、p3的使用,是前面定义了三个字符串,此处拿来使用。你可以直接把p1的内容"%x,%x,%x,%x,%x\n"拿来替换掉p1,就好理解了。
有什么问题请留言。
a[2][3]={0,1,2,3,4,5}
这时形成一个二维数组,元素是:
a[0][0]=0,物理地址&a[0][0]
a[0][1]=1,地址&a[0][0]+1
a[0][2]=2,地址&a[0][0]+2
a[1][0]=3,地址&a[0][0]+3
a[1][1]=4,地址&a[0][0]+4
a[1][2]=5,地址&a[0][0]+5
分配存储空间时,系统把每3个数据作为一组,组名记a[0]、a[1],这两个值分别是每组第一个元素的地址,即a[0]=&a[0][0],a[1]=&a[1][0]。
所以:
a指向数组首元素的地址,a=&a[0][0];
a[0]代表第一组首元素地址,当然,a[0]也指向数组首元素的地址,a[0]=&a[0][0];
*a是对a取值,它取出的是a[0],当然=&a[0][0];
&a[0]指a[0]的地址,还是它自己,所以&a[0]=&a[0][0]。
所以,第一行个打印语句输出的5个内容都是一样的,所以,输出5个19ff0c。是a[0][0](元素0)的储存位置。
第二个打印语句输出的5个内容也是相同的,都是19ff18。它们是a[1][0](元素3)的存放位置,19ff0C+3×4=19ff0c+12=19ff0c+c=19ff18。
后面也是类似解释。
具体p1、p2、p3的使用,是前面定义了三个字符串,此处拿来使用。你可以直接把p1的内容"%x,%x,%x,%x,%x\n"拿来替换掉p1,就好理解了。
有什么问题请留言。
更多追问追答
追问
这个程序将指针p1放入输出里,是指针p1依次指向a,*a,a[0]还是有别的意思
*a是对a的取值,但a指向的数组首元素地址,那*a不应该取出地址的值0吗
展开全部
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个方法我们没学过,从开始就不知道原理了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询