查找具有不同实例的结构的地址
学习考试,我遇到了一个有趣的问题。查找具有不同实例的结构的地址
我有一个结构:
struct vehicle {
long carId;
short wheels:3;
short fuelTank : 6;
short weight;
} x[5][5];
和x的地址被0xaaa和内存在的4的倍数这将是X [1]的地址一致?
我不知道从哪里开始,但是我发现结构的大小是16,当x [5] [5]是400时结构的大小显然是16的倍数。 其中之一是的答案:
a) 0xD2 b) 0xEA c)0xDC d) 0xAB
但我不知道如何从0xaaa到这些之一。
由于在“......内存以4的倍数对齐”的问题中写有这样的说法,假设类型长占用4个字节。
两个相邻的比特字段
short wheels:3;
short fuelTank : 6;
可以在short int
类型的一个对象容纳。因此,他们占据两个字节(尽管在一般情况下,它是实现定义)以同样的方式作为下一个数据成员
short weight;
因此我们得到的结构的大小等于8个字节。
x[1]
是所述阵列的第二元件,且类型struct vechicle[5]
因此,作为该结构的尺寸等于8,则阵列的元件的尺寸等于8 * 5 = 40
。在十六进制表示它等于0x28
因此这是x[1]
数组的第二个元素的地址是
0xaaa
+
0x28
=====
0xad2
美丽,谢谢你的解释和快速反应! –
@Michel Tamer不客气。:) –
你是如何得出的结论是,结构的大小是16? – Cristik
@Cristik using(sizeof(x)) –
好的,但是这会给你使用与你的机器相对应的内存对齐方式的struct的大小,它不一定与考试问题的值相同。在计算结构的大小时,需要考虑到这一点。 – Cristik