#define MAX_SIZE A+B struct _Record_Struct { unsigned char Env_Alarm_ID : 4; unsigned char Para1 : 2; unsigned char state; unsigned char avail : 1; }*Env_Alarm_Record; struct _Record_Struct *pointer = (struct _Record_Struct*)malloc (sizeof(struct _Record_Struct) * MAX_SIZE);当A=2, B=3时,pointer分配( )个字节的空间。
我们知道上面是结构体实现位段的能力
例如:
struct s
{
char a : 4;//也可以这样写char_a:4; 而4代表是4个bit位就是a分配四个bit位。
};
我们知道(sizeof(struct _Record_Struct) 是3个字节
我们会立马得出3*5=15可实际因为宏 实际是把MAX_SIZE替代为2+3
实际:
结构体向最长的char对齐,前两个位段元素一共4+2位,不足8位,合起来占1字节,最后一个单独1字节,一共3字节。另外,#define执行的是查找替换, sizeof(struct _Record_Struct) * MAX_SIZE这个语句其实是3*2+3,结果为9