首页 > 试题广场 >

计算器中变量的地址

[单选题]
某计算机存储器按字节编址,采用小端方式存放数据。 
假定编译器规定int型和short型长度分别为32位和16位
并且数据按边界对齐存储。
某C语言程序段如下:
struct{ 
    int a;
    char b;
    short c;
} 
record;
record.a=273;
若record变量的首地址为0XC008,
则低地址0XC008中内容及record.c的地址是 ( )
  • 0X00、0XC00D
  • 0X11、0XC00E
  • 0X11、0XC00D
  • 0X00、0XC00E
B:

编辑于 2015-09-28 13:51:04 回复(11)
答案:B
1、按照对齐要求,a  占4个字节,b  占2个字节,c  占2个字节
2、 273 = 0X0000 0111,机器采用小端存放数据(即高字节存放高地址,低字节存放低地址), 0XC008 处存放 11, 0XC008  存放 01……
3、从起始位置到存放 c 位置占用6个字节, 0XC008 + 6 指向  0XC00E
发表于 2015-09-29 16:10:39 回复(2)
char b 为啥是2字节大小
发表于 2015-09-29 23:58:15 回复(4)
B
struct{ 
    inta;  4
    charb; 1
    shortc; 
给地址0XC008 加5
发表于 2015-10-02 18:58:58 回复(0)
边界对齐的数据存放方法:
按边界存储是指半字、字、双字都按它们各自地址所指定的空间进行存储,而不是随意存放,这样可保证对一个字长数据的读/写只需要一次存储器访问即可完成,提高了访问效率,但有时会导致存储空间的浪费,因此,这是一种以存储空间换取存储速度的方法。 字长32位,则半字长16位,双字长64位。则按边界对齐方式的存储要求是:
> 双字数据起始地址的最末三位为000(8字节的整数倍);
> 单字数据起始地址的最末二位为00(4字节的整数倍);
> 半字数据的起始地址的最末一位为0(2字节的整数倍)。
网上找的~~~

发表于 2016-09-08 22:25:49 回复(0)
机器采用小端存放数据(即高字节存放高地址,低字节存放低地址)
发表于 2016-10-04 08:58:44 回复(0)
他是结构体,大小为8字节,给a赋值,会影响到c吗?
发表于 2016-08-07 23:41:04 回复(1)
B
发表于 2016-03-05 11:57:36 回复(0)