如皋人才网招聘信息:C语言的,辛苦大家了.k[5]怎么占10个字节?

来源:百度文库 编辑:中科新闻网 时间:2024/05/09 16:55:42
设有以下定义:
typedef union
{ long i;int k[5];char c;}DATE;
struct date
{ int cat;DATE cow;double dog;}too;
DATE max;
则下列语句的执行结果是
printf("%d",sizeof(struct date)+sizeof(max));
A)25 B)30 C)18 D)8

这道题有正确答案么??

我机器的试验结果是52

现在的机器通常int和long类型都是32位, 也就是4个字节

我给你讲一下思路吧

union联合, 不同于struct
union中的类型, 在使用时只会用到其中的一个, 你可以把他看作是单选题, 多选一, 选其中占用空间最大的。 所以, 在分配空间的时候, 系统会挑其中所占字节数最大的一个, 给它分配空间。 这到题中, int k[5]所占的空间是union中最大的, 按一个int占4个字节算, 就是20个字节。

所以sizeof(max) = 20;

而struct则不同, 分配空间时, 将按struct中所有类型所占字节大小的总和分配, 所以int = 4 加上struct date = 20 加上double 加上 8
这样的总和是32, 再加上之前算的20, 一共是52

而这道题的答案是30, 选B, 因为它是按照int 占2个字节算的, 你正好可以按照我说的方法自己再验证一下:)

整型 占2个字节
实型 占4个字节
字符型 占1个字节
int k[5]有5个整型,所以10个字节

靠,int 占 2个字节 int k[5] 不是10吗!

整型数组,一个元素占2字节,数组有5个元素.

在C语言当中,整型的字符占2个字节的。
用int 定义的具有5个元素的数组。当然占10个字节啊。
你说对吗?

int在不同平台的长度是不一样的,所以写程序要避免使用int,要2字节用short,要4字节用long