若有以下的说明和定义,则sizeof(struct aa)的值是

struct aa
{
int r1;double r2;float r3;
union uu{char u1[5];long u2[2];}ua;
} mya;
为什么答案是22?

算结构体的内存大小很麻烦的,没有你想像的简单,它是和编译器有关的。
按原始的算你这个的大小为24,即 int + double + float + 2 * long = 4 + 8 + 4 + 8 = 24;
但为了效率,不同的编译器会有相应的内存对齐操作,最后的大小会大于等于这个值,我在VS2010上得到的结果是32.追问

我用Microsoft (R) Visual Studio没有得到答案,就是在Buide时显示--------------------Configuration: 46 - Win32 Debug--------------------
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/46.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

46.exe - 1 error(s), 0 warning(s)
你怎么得到结果的?是不是我上面的程序写错了?

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-21
出现这个结果是正常的主要是内存对齐的原因。
主要和系统有关32位系统采用32位指令集时,64位系统采用64位指令集时各有不同。
32位举例定义结构体的实际大小是最大类型字段大小的整数倍。
第2个回答  2011-08-20
vc++6.0下32

'若有下面的说明和定义,则sizeof(struct aa) 的值是 struct aa { int...
故 sizeof(struct aa) 等于 3 个 double 大小,即 8*3 = 24 字节。上面 ABCD 4个答案 全错。

2013计算机二级C语言完整预测试题及答案一
35.若有下面的说明和定义,则sizeof(struct aa)的值是 struct aa { int r1; double r2; float r3; union uu{char u1[5];long u2[2];}ua; } mya; A)30 B)29 C)24 D)22 49 != return j 二、填空题(每空2分,共计30分) 1.长度为n的顺序存储线性表中,当在任何位置上插入一个元素概率都相...

若有以下定义和语句,则sizeof(a)的值是__ ___,而sizeof(b)的值是...
按说应该是 4*2 + 1 =9;但是,有个新手不知道的规则。那就是对齐。就是说,以4个字节为一行(32位),若当前的行中不够放下下一个数据的话,那么就放弃当前行的剩余空间,从下一行开始。于是,变成了 4 + ( 1 + 3【3个字节没有利用,但是依旧占用空间】) +4 = 12;一个float也是占用4个字节,这样,下一...

若有以下定义,则sizeof(a)的值是,sizeof(b)的值是拜托各位大神
呃,纠正下,sizeof(a)不见得是9,可能是12,或者别的值,运行时才能确定的 因为结构要4字节对齐,受很多因素影响。给你看个材料 sizeof() sizeof是运算符,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。 它在编译时起作用,而不是运行时。 这...

struct data{char c1;char c2;};则sizeof(struct data)的值是多少
2014-06-27 已知如下定义,则sizeof(a)的值是()struct{i... 2 2014-10-15 已经定义一个结构体struct data,现进行如下,能否解... 2011-02-20 struct{int i;char c;float a}te... 25 2014-04-08 设有结构体定义:struct data{int j:char... 2 更多...

sizeof返回的值到底是什么?
也就是说,sizeof(表达式)返回的值与表达式的结果的类型有关,另外sizeof返回的值本身的类型是unsigned long int的。比如:假设在一个系统上,int为4字节,long int为4字节,long long int为8字节,float为4字节,double为8字节。则,sizeof(1)返回4,sizeof(1L)返回8,sizeof(1LL)返回8。同时...

C语言 答案?为什么?关于sizeof()运算符详细说一下
般定义为typedef unsigned int size_t;世上编译器林林总总,但作为一个规范,它们都会保证char、signed char和unsignedchar的sizeof值为1,毕竟char是我们编程能用的最小数据类型。2. 语法:sizeof有三种语法形式,如下:1) sizeof( object ); \/\/ sizeof( 对象 );2) sizeof( type_name ); \/\/ sizeof( 类型...

关于结构体变量sizeof(structA)的大小问题?
大小跟对齐方式有关,一般是4字节对齐。但也可以改变对齐方式,使用 pragma pack(1)这样就按1字节对齐了,不过这样可能会影响效率,如非特殊需要,最好不要改

(1\/2)已知有如下声明,则sizeof(test)的值是___? struct {int i...
32位机 vc6.0里面的值是12;不同的编译器会不同的。记得以前学的是int 占2字节,char 占1字节,float占4字节。

(C语言)大学填空题
7. 若有int a[6],*p=a;,则数组元素a[3]可以表示为*(p+___2___ ) 或p[___2___]。8. 有如下结构体的定义:struct AA{ int *a,b;char c;};则sizeof(AA)的值是___12___。9.若类Sample 中只有如下几个数据成员:const float f,const char c,则其构造函数应 定义为___...

相似回答