首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-22 
baidu笔试题求解structs1{charch,*ptrunion{shorta,bunsignedintc:2,d:1}structs1*next}的大小是____

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个字节了,哈哈!!

热点排行