计组经典题目:001结构体与小端联合

【考研:计组原理】


题目描述

某计算机存储器按照字节编址,采用小端方式存储数据,假定编译器规定int和short型长度分别为32位和16位,并且数据按照边界对齐存储。 某C语言的程序段如下:

struct

{

    int a;

    char b;

    short c;

} record;

record.a = 273;

若record变量的首地址为0xC008,则地址0xC008的内容以及record.c的地址分别为:
A . 0x00 0xC00D B . 0x00 0xC00E
C . 0x11 0xC00D D . 0x11 0xC00E

【解析】
1.小端方式:高字节存放高地址,低字节存放低地址
2.int型长度为32位,a占4个字节,a的内容转换成16进制表示为0x00 00 01 11
3.存放地址

地址0xC0080xC0090xC00A0xC00B
内容0x110x010x000x00
地址0xC00C0xC00D0xC00E0xC00F
内容record.brecord.crecord.c

0xC00D本来该存放record.c,但是0xC00D是奇数,不是2字节(short的长度)的整数倍,所以里面为空。

【变式】如果结构体为

struct{
    char a;
    
    int b;
    
    short c;
}record;
record.a=273;
地址0xC0080xC0090xC00A0xC00B
内容record.a---
地址0xC00C0xC00D0xC00E0xC00F
内容record.b(0x11)record.b(0x01)record.b(0x00)record.b(0x00)
地址0xC0100xC0110xC0120xC013
内容record.crecord.c--

此时record占字节总数为12个字节,为最大字节成员(int)的整数倍。
0xC00C是int字节长度(sizeof(int)=4)的整数倍。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值