读书人

baidu笔试题求解,该怎么解决

发布时间: 2012-03-22 17:43:57 作者: rapoo

baidu笔试题求解
struct s1 {
char ch, *ptr;
union {
short a, b;
unsigned int c:2, d:1;
}
struct s1 *next;
};
的大小是_____字节

请解释下,

谢谢!


[解决办法]
16 个字节
struct s1 {
char ch, *ptr; // ch 四个(内存对齐),ptr 四个
union { // 选里面最大是2个字节,内存对齐是四个字节
short a, b;
unsigned int c:2, d:1;
}
struct s1 *next; // 指针在 32位机器下4个字节
};

LZ 也参加明天的百度校园招聘吗

[解决办法]
=============================
struct s1
{
char ch,*ptr;
union B
{
short a,b;
unsigned int c:2, d:1;
};
struct s1* next;
};//这样是12个字节
这里只有12个字节是因为
ch 4字节
ptr 4字节
next 4字节

UNION B 没有占字节,貌似编译的时候 UNION B 被编译器 "吃 "了
========================
非也!!!!
union B
{
short a,b;
unsigned int c:2, d:1;
};
只是个类型声明,即声明一个名字为B的union类型,本来当然就不占空间的,不是被编译器吃掉了.
现在改成
struct s1 {
char ch, *ptr;
union B{
short a, b;
unsigned int c:2, d:1;
} u;//定义变量了,占空间了!!!!
struct s1 *next;
};
又变成16个字节了,哈哈!!

读书人网 >C语言

热点推荐