一道二级C语言题目~~~

来源:百度知道 编辑:UC知道 时间:2024/05/14 08:22:18
#include<stdio.h>
typedef union student
{
char name[10];
long sno;
char sex[2];
float score[2];
}STU;
void main()
{
STU a[5];
printf("%d\n",sizeof(student)); // 为什么 等于 12 ?
printf("%d\n",sizeof(a));
}

// 有关这一方面的 题目该如何去 做~?????
各有各的 看法 二级考试出现这样的题怎么办???

因为定义的是union,"共用体",共用体与结构体的存储不同.
结构体所占内存长度等于种数值类型所占的总和.
共用体只看最大的那个数值.
char name[10]; 占10个字节
long sno;占4个字节
char sex[2]; 占2个字节
float score[2];占8个字节

理论上答案分别应该是10和50
但这里的答案却是12,很显现楼主是用VC++编译的.
要是用MyTc编译的话结果会是10.(这个我已经测试了)

我只能猜测VC本身有问题,我做了很多次的测试.
当一个共用体里面同时包含字符型(char)、整型(int、long、float等),且整型占的长度大于字符型时,它会正常显示。(这题却是字符型占的长度大于整型)

如果二级考试出现这样的题,你就按理论的做,10.

回答:yipian_yezi
如果是这样:
typedef union student
{
char name[5];
float score[2];
}STU;
结果是8.
你说的"union的大小是每个最小类型的倍数"不也就靠不住了. 我只是想说用VC做这类题明显就是有问题的,建议还是用其它的编译工具.如MyTc.

有点忘记了各种数值类型占多少为了
int好像是一位
char是int的一半
long是两位
float也是两位
所以加起来是12位

其实做这种题目关键就是要知道每种数值类型所占的位数
然后加起来就可以了

你去查下看看
或者直接用sizeof来验证各种数值类型

long sno;
sizeof(sno);

好像是计算的是字节
不是位
好久没碰上了
我记得好像是1B=8bit
1字节=2B
所以是以上的结果

这是个共用体类型,