鱼C论坛

 找回密码
 立即注册
查看: 1622|回复: 6

[已解决]c语言指针

[复制链接]
发表于 2020-12-24 22:20:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
若有以下定义和语句,则对a数组元素地址正确引用的是()
A.*(p+2)     B.p[2]    c.p[1]+1     D(p+1)+2
答案选C,但是这是怎么个运算方法???求解,谢谢啦
最佳答案
2020-12-24 22:53:45
     信息不全啊,变量定义呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-24 22:53:45 | 显示全部楼层    本楼为最佳答案   
     信息不全啊,变量定义呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-25 08:18:18 | 显示全部楼层
若有以下定义和语句,则对a数组元素地址正确引用的是()
int a[2][3],(*p)[3];
p=a;
A.*(p+2)     B.p[2]    c.p[1]+1     D(p+1)+2
答案选C,但是这是怎么个运算方法???求解,谢谢啦
不好意思,昨天有点迷糊,哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-25 11:28:57 From FishC Mobile | 显示全部楼层
首先,a是一个数组,有两行三列。p是一个指针,这个指针定义为可以指向长度为3的一维数组。
然后p=a,就是将p指向了a的第一行,a的第一行是长度为3的一维数组,这里刚好对应。于是*(p+2),p[2]两者一样,都是从a的首地址前进自身长度3乘以2后的内存空间,但前进3乘以1的空间就指向a的第二行了,这两者都越界。D选项这个括号没什么功能,就是前进3乘以1再前进3乘以2,跑到老前面了。至此可以看到A,B,D三项都是越过a数组访问了一个未知内存。c选项正确,没有越界,来到了a[2][2]的内存空间。虽然数组与指针的关系你学过了,这里还是解释一下,“[]”与“*”功能相同,假定p指向三个元素的一维数组arr[3],那么p[0]与*p都与数组名arr的含义相同,即arr[0]的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-25 14:10:04 From FishC Mobile | 显示全部楼层
谢谢了,倒戈卸甲,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-25 16:41:59 From FishC Mobile | 显示全部楼层
倒戈卸甲 发表于 2020-12-25 11:28
首先,a是一个数组,有两行三列。p是一个指针,这个指针定义为可以指向长度为3的一维数组。
然后p=a,就是 ...

D,这个括号没什么功能,就是前进3乘以1再前进3乘以2,跑到老前面了
这句话可以再通俗的解释一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-25 19:33:23 From FishC Mobile | 显示全部楼层
本帖最后由 倒戈卸甲 于 2020-12-25 19:36 编辑
迷砖00 发表于 2020-12-25 16:41
D,这个括号没什么功能,就是前进3乘以1再前进3乘以2,跑到老前面了
这句话可以再通俗的解释一下吗?


。。。。这原理不就和四则运算一样,(1+2)+3这个括号是不是没用,就是1+2+3嘛。这个括号也是没有任何用,就是p+1+2或者说就是p+3,由a前进3x3个内存空间。
对了,倒是前面为了省事用了我自己的话讲,但“内存空间”这个说法有点不好,在这里准确说应该是“int型变量大小的内存”,因为a是int数组。比如说*(p+3),那指向的地址应该是a+sizeof(int)*3*3。但应该不至于引起误解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 17:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表