多益笔试+字节对齐

本文详细解析了字节对齐的概念及其在结构体中的应用,并通过实例介绍了不同类型的指针加法运算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struct {

 

int a;

 

char b;

 

long c;

 

short d;

 

short e[5];

 

}*p;

P=0x1000000;

P+0x200=?

(unsigned long*)p+0x200=?

(unsigned char*)p+0x200=?

分析:本题考察字节对齐

来了解一下字节对齐:

Struct AA

   Char a;

   Int b;

   Char c;

aa;

Sizeof(aa)=12;

1 _ _ _ 4 1 _ _ _

注意有时候大家以为为9,但结构体的有效对齐值为其中最大成员

即:int 4 所以要扩展到12

Struct AA

  Char a;

  Char c;

  Int b;

}aa;

Sizeif(aa)=8

如果指定了对齐值

#pragma pack(2)

就压以这个为标准

Struct AA

{

 Char a;

 Int b;

 Char c;

}aa;

Sizeof(aa)=8;

1 _  2 2 1 _

接着在来分析这个题

*P的大小为24

4 1 _ _ _ 4 2 2 2 2 2 2

P+0x200在第七个问题中讨论了p+1的值,即:p加上*P类型对象的大小

p+0x200也类似p+0x200*24

注意2410进制而0x20016进制

2416进制为18p+0x200*18=0x1003600

(unsigned char*)p+0x200p+0x200*sizeofchar)的值为0x1000200

(unsigned long*)p+0x200p+0x200*sizeoflong)的值为0x1000800

4116进制还是本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值