如果你不太清楚int *和char *的区别,看完这道题,可能就会有所感悟。
一个字符数组a,初始化成:
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
然后定义三个指针,分别是:short *int *int64 *
这里把 int64 理解成 8 个字节的整数就行,不用管它是不是真的存在。
三个指针都初始化成数组名a,也就是数组第一个元素的地址,假设数组首元素地址是 0x100,那三个指针的值都是 0x100。
如果画出来,就是这样的。
下面就要来搞清楚 short * 和 int * 的区别。
所谓short *,表示一个指针,指向的是short类型的数据。在32位系统中,short类型占2字节,所以指针指向的是这两个字节。如果让指针加一,它也会跳过两个字节。
同理,如果是int *类型,也表示一个指针,指向int类型的数据,在32位系统中,int类型占4字节,所以指针指向的是这4个字节,如果让指针加一,他也会跳过4个字节。
再回到数组上,因为三个指针类型不同,所以指向的数据长度也不同。
接下来就是取值操作。
*p1就是取指针 p1 指向内存的值,但是并不能简单的认为结果是0x0102。也有可能是0x0201。
还好题目一开始说了,32位系统,小端字节序。
所谓小端,就是高地址保存高字节。
在数组里面,下标为 0 的元素一定是低地址,所以01应该就是低字节。
于是 *p1 是 0x0201。
*(p1 + 2)应该会跳过4个字节,刚才说了,short *类型的指针,加一会跳过2个字节。所以*(p1 + 2)的结果是0x0605。 p3因为指向了8个字节,所以*p3是0x0807060504030201。
最后一个*(p2 + 2),p2是int类型的指针,加2跳过了8个字节,表示的是最后4个字节的地址,取值的结果就是0。
食品添加剂检测仪的产品性能
中控智慧科技考勤机U260简介
新能源汽车下半年将再迎高潮 明年电动汽车产业或迎首轮低谷期
OPPOR11、OPPOR11Plus最新消息:华为Nova2、华为Nova2Plus先发制人26日发布,OPPOR11还能续辉煌嘛?
OTN to CO助力运营商打造面向未来最佳体验城域承载网
分析不同指针类型的区别
刘铁岩谈机器学习:随波逐流的太多
雷曼超高清大屏护航亚运会电力保障指挥
财路网每日原创推送:区块链的“三围”了解
一文了解电源变压器的工作原理/功能及损耗
电线漏电报警器电路图
令令开门获国家知识产权局授予的两项专利证书
小米8青春版好不好用
灵活的解决方案将赋能未来的数字化员工
艳惊四坐三星note8真机曝光?真长这样颜值就可以秒杀了!
料位计种类
海康存储现状分析
为您解读”吃“背后的美团AI技术布局
2018Medtec中国展盛大开启 医用包装材料+包装加工设备+灭菌惊艳亮相
利用Protel DXP手工修改电路板布线