求助3道c语言指针这一块的选择题
三道选择题第一题
p【4】是一个结构体数组
->指向运算符之前要用指针 为什么p可以用指向运算符呢 他不是一个结构体数组名吗[
attachimg]126645
第二题
这个表达式到底要我求的是什么 看不懂
(int * )q- (int * p)
第三题
17.已知某函数内有声明:inta, (*ptr)=a, *p=a; ,则能正确引用数组元素a的是( )。
A.*(++ptr) B.*(++p+2) C.*(*++ptr+2) D.*(*++a+2)
答案选c
但是我认为ac是一样的
a的括号展开不就是c嘛
acd感觉都是对的,就知道b是错的 1. 查一下 数据和指针的关系(数据变量名,可以当作指针使用)
2. 涉及第一题指针与数据的关系,也涉及了指针的步长,指针类型转换
a. 数据变量名就是数组的首地址, 数据名加一 (s + 1) 等价于 (&s) 取第一个元素的地址
b. 指针步长与指针类型相关,等于指针指向变量类型的大小。比如,32位机器,long 类型指针的步长为4Byte, 64位机器 long 指针步长为8byte
c. 题目将 struct 的指针转成了 int* (整形的指针), 指针类型的转换,影响的是解析指针的方式(寻址,内存对齐等)
综上所述,题目就是有一个包含两个整形的结构体,然后获取两个指针,相隔的步长为1,然后将这两个指针转换成整型的指针,此时相减,因为类型从两个整形变成了一个整形类型,所以步长变成了原来的一半,所以结果的 1(原来相差的步长) * 2(步长缩小的倍数)
3. 自己分析
好的谢谢 第一第二题都懂了
第三题 还是不懂 下面是我的分析
ptr是一个指向二维数组的指针 p是一个一级指针
A选项 ++ptr 代表 ptr指向了二维数组a【1】 也就是第二行的首地址 且【2】说明是第二个元素 与题目相符
B选项 p是一级指针指向二维数组首地址++p 代表是的 a【0】【1】再加2 代表的是a【0】【3】 错误
C选项 与A选项一致 ++ptr指向a【1】 后面+2则指向a【1】【2】与题目相符
D选项 a是二维数组首地址 数组名好像不能进行自增运算 所以d错误
最后答案是c 我不知道ac有什么区别 还要请教大佬
d选项我的分析正确吗? 赚小钱 发表于 2020-5-8 20:53
1. 查一下 数据和指针的关系(数据变量名,可以当作指针使用)
2. 涉及第一题指针与数据的关系,也涉及了 ...
好的谢谢 第一第二题都懂了
第三题 还是不懂 下面是我的分析
ptr是一个指向二维数组的指针 p是一个一级指针
A选项 ++ptr 代表 ptr指向了二维数组a【1】 也就是第二行的首地址 且【2】说明是第二个元素 与题目相符
B选项 p是一级指针指向二维数组首地址++p 代表是的 a【0】【1】再加2 代表的是a【0】【3】 错误
C选项 与A选项一致 ++ptr指向a【1】 后面+2则指向a【1】【2】与题目相符
D选项 a是二维数组首地址 数组名好像不能进行自增运算 所以d错误
最后答案是c 我不知道ac有什么区别 还要请教大佬
d选项我的分析正确吗? KrisWang 发表于 2020-5-9 12:00
好的谢谢 第一第二题都懂了
第三题 还是不懂 下面是我的分析
ptr是一个指向二维数组的指针 p是一个一级 ...
我分析不出来,因为我几年没写c了。
我的直觉告诉我应该和运算符优先级有关(* 解引用 与 + 指针计算)。
不同的优先级会导致做指针计算的时候,指针的类型不一样,也就是步长不一样。
PS: 作为一个工作过一段时间的人,给你一些建议,研究这些没用,能毕业就行。有这个时间,不如把操作系统,数据结构,算法,网络,数据库,这些学好。
如果有更多的精力,去参加开源社区。
以上,祝好。 赚小钱 发表于 2020-5-9 16:35
我分析不出来,因为我几年没写c了。
我的直觉告诉我应该和运算符优先级有关(* 解引用 与 + 指针计算)。
...
好的 谢谢
页:
[1]