指针在二维数组中赋初值和定义问题
发表在C语言图书答疑 2018-01-04 《C语言从入门到精通(第3版)》第10章 指针 240页-241页
是否精华
版块置顶:

240页定义了int a[3][5],i,j,*p;p=a[0];

而例10.8中定义int a[3][5],i,j,(*p)[5];p=&a[0];

两种定义方式,有什么区别,都在什么情况下适用?

为什么一个前面没有&,一个赋值&a[0]呢?如果分别都加上&和去掉&,还能如原来一样运行吗?                      


分享到:
精彩评论 4
李木子
学分:2954 LV11
2018-01-04
沙发

你好:

  这是2种初始化方式,一个定义的是*p,另一个定义的是*p[5],是指针数组

newc
学分:10 LV2
2018-01-05
板凳

李木子 发表于2018-01-04 19:04

你好:

  这是2种初始化方式,一个定义的是*p,另一个定义的是*p[5],是指针数组

我知道,可是区别在哪里呢,什么情况下适用

李木子
学分:2954 LV11
2018-01-05
地板

newc 发表于2018-01-05 10:54

我知道,可是区别在哪里呢,什么情况下适用

你好:

 看你怎么定义指针嘛,这2种方法都可以,如果定义的是(*p)[5],那就使用p=&a[0],如果定义*p,就使用p=a[0]

newc
学分:10 LV2
2018-01-05
4L

李木子 发表于2018-01-05 11:47

你好:

 看你怎么定义指针嘛,这2种方法都可以,如果定义的是(*p)[5],那就使用p=&a[0],如果定义*p,就使用p=a[0]

同样是指向二维数组。(*p)[5]和*p[5]意义一样吗?什么情况下要用指针数组呢,光是指针不就可以达到目的吗?

p=&a[0]是指零行的首地址吧,p+1意义是下一行首地址?

p=a[0]是指零行首个元素的地址,然后p+1是下一个元素的地址?

所以涉及全部二维数组赋值和输出的时候,要用p=a[0],这样自加就可以得到所有元素的值,实际上p=a也可以得到相同的结果吧,目的只是将首个元素的地址给p;但是用行和列来赋值的时候,就要定义p=&a[0],这样可以切换行和列,达到*(p+i)+j的效果来输入和输出,可以这样理解吗?

但是行和列来操作的时候,不定义指针数组不行吗,直接定义指针然后赋值p=&a[0],不也是一个意思吗,为什么执行时有错误呢?


首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照