查找具有不同实例的结构的地址

Finding addresses of structs with different instances

正在备考,遇到一个有趣的问题。

我有一个结构:

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的倍数对齐”,假设long类型占用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