【LittleXi】地址空间三题

编程入门 行业动态 更新时间:2024-10-22 17:35:19

【LittleXi】<a href=https://www.elefans.com/category/jswz/34/1770965.html style=地址空间三题"/>

【LittleXi】地址空间三题

【LittleXi】地址空间三题

问题

给定这个结构体

struct
{bool s;short b;const char *str = "AABB";int i;
} a[2];

计算这三个输出

printf("%d\n", (char *)(&(a[0].i)) - (char *)(&(a[0].s)));
printf("%x\n", (&(a[1].i)) - (&(a[0].i)));
printf("%x\n", *(short *)(a[0].str + 2) - *(short *)(a[0].str));

分析及答案

第一问:答案是16,由存储结构可知,计算的是a[0]中i的位置减去s的位置
第二问:答案是0x6,计算的是两个数组同一位置的差值,其实就是一个结构体的大小,由存储结构可知为8+8+4+4=24=0x18,但是根据指针减法特性,应该除以int的大小也就是0x18/4,答案为0x6
第三问:答案是0x101,这题比较神奇,先获取str首位置便宜0和2的位置,然后把他转为short*类型,然后再解地址,
因为被强转为了short,所以会解2个byte的值出来,*(short *)(a[0].str + 2)解值出来是"BB"对应16进制的0x4242,
*(short *)(a[0].str)解值出来是"AA"对应16进制是0x4141,
第三问其实已经降低难度了,如果str是"ABCD",那么根据小端法原则,解值出来是"DC"、"BA"

地址存放如下:

在这里插入图片描述

更多推荐

【LittleXi】地址空间三题

本文发布于:2023-12-04 12:17:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1660888.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:地址   空间   LittleXi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!