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

时间:2015-04-17 18:41:04

标签: c struct memory-address

参加考试,我遇到了一个有趣的问题。

我有一个结构:

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到其中一个。

1 个答案:

答案 0 :(得分:1)

由于在问题中写道“......内存以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