一文让你学会做C语言变量指针题

🌈据说,看我文章时 关注、点赞、收藏帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~

人生苦短,我用python

一文让你学会做C语言变量指针题

题目

在这里插入图片描述
已知 static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p ,则表达式 *(p[0]+1)+**(q+2) 的值是( )。
A. 5      B.4      C. 6      D.7

解说

刚开始看到这个题目,是不是有点懵?感觉自己学的是假的指针,不要慌!
接下来看我的方法:
首先要催眠自己记住:*是从地址中取值,&是获取值的地址;*是从地址中取值,&是获取值的地址;*是从地址中取值,&是获取值的地址…
然后我们假设有个内存条(我的独门秘诀,对你分析题目一定有帮助!不要怕写的麻烦,做出来一定会让你骄傲一秒钟!):

内存地址内容
0x01005
0x01014
0x01023
0x01032
0x01041

然后又知道直接使用变量 a 的话,就会获取数组第一个值的地址,即 a = 0x0100
接下来题目赋值了一个指针数组,继续给我们的内存条加内存:

内存地址内容
0x01005
0x01014
0x01023
0x01032
0x01041
0x02000x0103
0x02010x0102
0x02020x0101
0x02030x0100

新增的就是指针数组 p 的内存地址。
然后看到 **q=p ,一个 * 就让我们很慌了,两个 * 怎么办?
不要慌!遇到问题先发个朋友圈 !
首先我们要理解一下这个 p ,他是存指针变量的数组,所以他存的数值都是指针地址,而他存的是另一组指针地址。
然后我们来转换一下,我们应该熟记:
*address = value
address = &value
对吧?
所以此处的 **q=p 就可以转写为 *q=&p ,现在再用中文说一遍:
指针 q 是变量 p 的地址,所以此处应该是 q = 0x0200 对吧?
然后我们将所有内存地址与变量的对应关系代入总的算式:

*(p[0]+1)+**(q+2)
= *(a+3+1)+**(0x0200+2)
= *(0x100+4)+**(0x0202)
= *(0x0104)+**(0x0202)
= 1+*(0x0101)
= 1+4
= 5

所以选 A

在这里插入图片描述

没毛病啊!

结束语

我觉得经过这解说,整个题目变得十分清晰了。
如果我的解说对你有帮助,不要忘了 关注、点赞、收藏 哦~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值