查找具有不同实例的结构的地址
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
正在备考,遇到一个有趣的问题。
我有一个结构:
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