首页 > 试题广场 >

地址 0xC008 中内容及 record.c 的地址是(

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

若record 变量的首地址为 0xC008,则地址 0xC008 中内容及 record.c 的地址是( )。


  • 0x00、 0xC00D
  • 0x00、 0xC00E
  • 0x11、 0xC00D
  • 0x11、 0xC00E
大端模式:数据低位放在内存高位;
小端模式:数据低位放在内存低位;

将a从十进制化成16进制: a = 273 = 0x0000 0111(32位)
一个字节存储8位,因此0x0000 0111分为0x00,0x00,0x01,0x11四个字节来储存。其中0x11是数据的低位,根据小端模式应该存在地址的地位,也就是0xC008

数据存储时要内存对齐,内存对齐的三原则不记得的可以百度一下。
说的太麻烦,给张图。

----改----
对不起各位牛友,评论区有人说这个图画的有点问题,看了一下确实有点问题,不过将就还能看。错误的地方就在存a的四个字节不是1,1,0,1,而是11,01,00,00。


编辑于 2017-08-14 17:40:52 回复(8)
273=0x00000111
所以0xC008中存放的是11
int先是4个,那么首元素大小是4
char1个,short2个
char1个和int是对其的,然后4-1=3,说明char的剩余空间还多呢3>2,但是要对其于MAX(1,2)=2,那么就是2对其,于是char补齐成了2个,
最后是
4
2 2
即8
发表于 2016-11-25 17:54:47 回复(2)
1,首先采用小端模式存储数据,表示高位放在高字节,地位放在低字节。十进制的273=0x00000111(int型变量四字节);而record.c的首地址为0xC008,所以0xC008中存放的是11;
2,根据结构体内部成员的对齐规则和结构体对齐规则可得int变量占前四个字节,char变量占一个字节,char与short之间空一个字节,short变量由于是两字节,所以record.c的地址是0xC00E。
发表于 2016-11-24 22:50:25 回复(5)
发表于 2018-06-06 15:39:24 回复(1)
根据地址0xC008知道这是16位机,当然字长为2,那么就是按照两个字节对齐!
大端符合人类的逻辑,地址由低到高,字节由高到低;小端相反,最低字节放在地址的低位哈,那么就是第一个字节放00010001(0x11)
发表于 2017-04-14 20:17:02 回复(1)
int :4字节
char:1+3字节
short:2+2字节
那么record.c的地址是:0xc008+8 = 0xc010
是这样吗?
发表于 2016-11-30 10:10:46 回复(1)
边界对齐的要点简单来说,对于int型而言,起始地址为4的倍数;对于char类型而言,起始地址为任意字节皆可;对于short类型而言,起始地址为2的倍数
发表于 2017-08-22 09:34:29 回复(4)
由于short的长度是半字,而半字的地址必是2的整数倍(相应的int为字,地址必是4的整数倍)
发表于 2023-11-10 20:43:34 回复(0)
两位十六进制数由1个字节组成
发表于 2018-10-25 16:53:11 回复(0)
小端方式
发表于 2018-08-27 12:17:04 回复(0)
一个字节占8位啊。。。。迷糊了
发表于 2018-06-24 16:06:58 回复(0)

解析:首先你要明白的只是1.OXc008只表示一个字节的位置标记,2.小端模式是低位低地址,3.内存对其准则。下面开始分析

已知record.a=273转换为16进制就是0x00000111,且record的首地址就是a的起始地址,a为int类型占4个字节,所以0xc008 0xc009 0xc00A 0xc00B 对应的分别是11 01 00 00 ,如果在vs下查看可能一行就显示完了。所以0xc008对应的是11.

下面分析record.c的地址,不知道内存对其的可以去我的博客看https://blog.csdn.net/it_iverson/article/details/74790127
a的地址前面 已经阐述为分别为0xc008 0xc009 0xc00A 0xc00B,那么b就紧接着从0xc00C开始分配,占一个字节,此时该分配c但是c是两个字节,前面已经分配了5个字节了,不是2的倍数,所以对其一个字节到0xc00d,所以c从0xc00e开始分配地址.所以record.c的起始地址是0Xc00E.

发表于 2018-06-18 11:56:09 回复(0)

发表于 2017-09-10 10:30:10 回复(0)
小端方式存储,低位存放在低位,高位存放在高位;
内存对齐8,9,10,11  12,13  14
编辑于 2017-09-10 10:48:25 回复(0)