鱼C论坛

 找回密码
 立即注册
查看: 1498|回复: 5

[已解决]俩道指针选择题求帮助

[复制链接]
发表于 2021-5-4 22:01:03 | 显示全部楼层 |阅读模式

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

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

x
对语句“int a[10],*p=a;”,下列表述中哪一个是正确的     。
     A、*p被赋初值为a数组的首地址        B、*p被赋初值为数组元素a[0]的地址
     C、p被赋初值为数组元素a[1]的地址    D、p被赋初值为数组元素a[0]的地址


数组定义为“int a[4][5];”,引用“a+3”表示      。
     A、a数组第4列的首地址                B、a数组第1行第4列元素的值
     C、a数组第4行的首地址                D、a数组第1列第4行元素的值

因为就学了半个月c语言,基础有点不太牢靠,
想问一下,第一题选择D而不是选择A的原因是什么,有点没明白概念


和第二题选C而不选B,是否是因为引用这个词和&这个取值符号是类似的意思呢

不是很能明白指针的这些地方,希望大佬们能教一下我呜呜呜,不然只能死记硬背把题型记下了
最佳答案
2021-5-5 10:36:27
第一道题目解答:
  第一道题目涉及运算符号的重载,*在C语言中有3个含义,分别为:对于两个常数的乘法运算、对指针变量的取值运算(实际上是解引用,取指针所指向的那片内存空间)、以及在变量声明时定义指针类型。所以在题目的选项中*号是取值运算符,A选项中的*p的含义是取指针变量p的内存地址所指向的值,即 *p == a[0];  而p中自然是a[0]的地址。

第二题解答:
  第二道题涉及数组的指针和指针数组(这边容易混淆,建议多多查阅相关资料),int a[4][5]实际上定义的是一个有四个数组指针的指针数组(有点饶,有多种理解方式,可忽略),每个数组指针是一个含有5个元素的一维数组的首地址。a++的含义是移动到下一个一维数组的首地址。同理,a+3的代表的第四个数组的首地址。

可以参阅下图助于理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-4 22:06:28 | 显示全部楼层
数组名是数组第0个元素的地址
a + 3 就是 &a[3][0]
第3行第0列

评分

参与人数 1鱼币 +5 收起 理由
Mr.鹿 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-4 22:11:51 | 显示全部楼层
*p *代表取值运算符嘛 所以*p不是地址
第二个的话:a+3就是代表二维数组加3行,这种的是代表加行
还有一种是a[1]+3-->是a[1][3]因为a[1]代表a[1][0]

评分

参与人数 1鱼币 +5 收起 理由
Mr.鹿 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-5-5 10:36:27 | 显示全部楼层    本楼为最佳答案   
第一道题目解答:
  第一道题目涉及运算符号的重载,*在C语言中有3个含义,分别为:对于两个常数的乘法运算、对指针变量的取值运算(实际上是解引用,取指针所指向的那片内存空间)、以及在变量声明时定义指针类型。所以在题目的选项中*号是取值运算符,A选项中的*p的含义是取指针变量p的内存地址所指向的值,即 *p == a[0];  而p中自然是a[0]的地址。

第二题解答:
  第二道题涉及数组的指针和指针数组(这边容易混淆,建议多多查阅相关资料),int a[4][5]实际上定义的是一个有四个数组指针的指针数组(有点饶,有多种理解方式,可忽略),每个数组指针是一个含有5个元素的一维数组的首地址。a++的含义是移动到下一个一维数组的首地址。同理,a+3的代表的第四个数组的首地址。

可以参阅下图助于理解

二维数组

二维数组

评分

参与人数 1鱼币 +5 收起 理由
Mr.鹿 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-5-6 11:26:30 | 显示全部楼层
人造人 发表于 2021-5-4 22:06
数组名是数组第0个元素的地址
a + 3 就是 &a[3][0]
第3行第0列

谢谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-6 11:27:42 | 显示全部楼层
人中仙 发表于 2021-5-5 10:36
第一道题目解答:
  第一道题目涉及运算符号的重载,*在C语言中有3个含义,分别为:对于两个常数的乘法运 ...

谢谢谢谢,我琢磨一下,hhhh概念型的东西好容易混淆,淦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 11:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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