C语言问题

设有以下说明和定义:
   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.26
B.30
C.18
D.8
过程
再详细点呗,每个长度都是多少?

第1个回答  2010-01-21
考点是共用体和结构体的长度。
下面说一下他们的不同:
所谓共用体(也叫联合体)就是公用一段内存大小,他的成员的地址都是同一地址, 所以共用体占得内存长度=最大的成员的长度。

结构体类型不同他是将具有一定联系的数据组成一个整体,包含若干不同的数据项,系统会对他的每个成员分配内存。所以结构体的内存长度=每个成员们占得内存之和

=10+2+10+8=30选B
第2个回答  2010-01-21
B(30)
sizeof(struct date):2+10+8=20
sizeof(max):2*5=10

联合体DATE的大小按最大的,即int k[5],10个字节

char:1
int:2,也可能是4(本题为2,因为没52这个答案)
long:4
float:4
double:8
DATE:10本回答被提问者采纳
第3个回答  2010-01-21
你的int是多长的?

typedef union
{
long i;
int k[5]; //这个的长度就是联合体的长度5*sizeof(int)
char c;
}DATE;

struct date
{
int cat;//sizeof(int)
DATE cow;//5*sizeof(int)
double dog; //sizeof(double)=8
}too;

sizeof(struct date) = 8+6*sizeof(int)
sizeof(max) = 5*sizeof(int)

加起来8+11*sizeof(int)
如果sizeof(int)=2,那么结果就是B.30
第4个回答  2010-01-21
两个共用体的长度相加即
相似回答