sizeof是指这个数据类型分配的单元内存大小,比如int 是4,等等,所以sizeof(struct date)=4+4+4=12, union类型比较特殊,它的长度大小时内部成员中最大的一个的长度,所以sizeof(m)是其中long的值,也就是8
上面这么多朋友都在乱说,不怕误导别人啊?
VC环境下的答案是124(TC环境下是64,因为int在VC下占4字节,而在TC下占2字节)
sizeof(struct date)=12(year,month和day每个占4字节,所以结构体today占用3×4=12字节)
sizeof(m)=4(a占4字节,b占4字节,c占1字节,所以联合m是它们最大成员占用的字节数,即4字节)
上面已经讲得很清楚了,我也来讲句废话,简单地来说,sizeof()就是返回括号中变量或数据类型在内存中所占的字节数。如:sizeof(int)则返回4;sizeof(x)则返回8,这里假设x是double型。(在vc6.0环境下)
16 4
struct如果超过8,就必须是8的倍数,而且要按8对齐。这里int year month加起来是8,剩下一个day由于要对其,也给他安排8字节内存,所以是16
Union是共用内存,取占字节数最多的为准,这里long占4个,所以4个
反正sizoef作用就是计算数据类型在内存中的分配大小.
上面程序段的意思就是:
先定义一个结构体data,再定义一个联合体m.
"printf("%d%d\n",sizeof(struct date),sizeof(m));"就是输出结构体data和联合体m分别所占内存长度.
答案高金山同志已经给出.即
sizeof(struct date)=12;(结构体data是每一个数据类型所占字节数总和)
sizeof(m)=4.(联合m是它们最大成员占用的字节数,)
其输出结果为:
124