已知sizeof(char)=1,sizeof(short)=2,sizeof(int)=4,现在有个结构体如下: struct size { int a; char c;

已知sizeof(char)=1,sizeof(short)=2,sizeof(int)=4,现在有个结构体如下:
struct size
{
int a;
char c;
short s;
};
为什么sizeof(size)=8呢?下面结构体也是8,为什么?
struct size
{
int a;
char c;
char b;
short s;
};(用VC6.0试过,32位的Win7系统)

第1个回答  2010-10-10
内存对齐问题。
首先,你要明确一点:内存对齐的时候整体占的内存一定是最大数据元素的整数倍,比如说第一个里面最大的是整形(4字节),那么整体的内存一定是4*n个字节。但不一定是4*元素个数。
下面看一下第一个size:a占4个字节,没什么问题,然后接下来4个字节先放上一个char,还剩3个字节,能放下short,所以char和short公用一个四字节块,虽然尾部的一个字节没有用。
第二个size:a占4个字节,然后接下来4个字节放两个char和一个short刚刚好。
所以这两种情况都是8字节。本回答被提问者采纳

sizeof 问题
那么,sizeof(char)=1, sizeof(int)=4,sizeof(short)=2。所以对于name1,str起始地址为name1+0,x起始地址为name1+2,num起始地址为name1+4。计算到name1的末端,一共8个字节长,其中有3字节没有存储数据。name2同理,str:0 num:4 short:8,总共占据10字节,不过,struct的大小本身也有约...

sizeof(char)等于1,那sizeof(‘a’)为什么等于2?
如果结果是2,那么只有一个解释,‘a’是整型常量,是unsigned int,且楼主的编译器中int的宽度为16位2字节,所以是2。

...{ char a; int b; short c; }; 请输入sizeof(test1); 麻烦再解 ...
sizeof(char) = 1 sizeof(int) = 4 sizeof(short) = 2 所以结构体将以4对齐,也就是结构的起始地址和int的起始地址必须为4的倍数,为了满足这个结构体将被分配为3*4B,其中中间4B由int的使用,前面的4B的第一个由Char使用,而后面的两个有Short使用,一共有3B属于无用内存。所以sizeof(test1...

C语言中sizeof运算符有什么用?
在 C 语言中,可以使用 sizeof 运算符来计算不同数据类型所占用的空间大小。sizeof 运算符的语法格式如下:sizeof(type)其中,type 是数据类型,可以是 int、char、float、double、struct、union 等等。下面是常见数据类型在 64 位系统中所占用的空间大小:char:1 字节 short:2 字节 int:4 字节 ...

一个结构体的站字节数是手所元素占的相加?
sizeof(char) = 1; sizeof(int) = 4。基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。C语言中的构造数据类型有三种:数组、结构体和共用体。数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基础元素大小乘上元素的个数。结构体中的成员可以是不...

...=4; sizeof(*p) = 1; \/\/相当于sizeof(char) 第二条语句中的结果为什...
Intel 32位处理器32位运行模式,逻辑寻址位数32,指针也就是32位,即4个字节 Intel 32位处理器16位虚拟机运行模式,逻辑寻址位数16,指针也就是16位,即2个字节 编译器的作用是根据目标硬件(即CPU)的特性将源程序编译为可在该硬件上运行的目标文件。如果一个编译器支持某32位的CPU,那么它就可以...

若有以下定义,则sizeof(a)的值是,sizeof(b)的值是拜托各位大神_百度...
它在编译时起作用,而不是运行时。 这是初学者问得最多的一个问题,所以这里有必要多费点笔墨。让我们先看一个结构体: struct S1 { char c; int i; }; 问sizeof(s1)等于多少聪明的你开始思考了,char占1个字节,int占4个字节,那么加起来就应该是5。是这样吗你在你机器上试过了吗也许你...

下面的C++代码中的sizeof(char *)与sizeof(int*)为什么相等都等于4?
sizeof(char*)sizeof(int*)就是指的指针的大小,指针大小在特定的编译平台上市固定的,所以两个都为4个字节

sizeof与结构体
结构体 typedef struct { char c:2;double i;int c2:4;}N3;在GCC下占据的空间为16字节,在VC下占据的空间应该是24个字节。5) 整个结构体的总大小为最宽基本类型成员大小的整数倍。ps:对齐模数的选择只能是根据基本数据类型,所以对于结构体中嵌套结构体,只能考虑其拆分的基本数据类型。而对于对齐...

C语言中 。定义a[100],求sizeof(a[100]),以及sizeof(&a)和sizeof(&a...
sizeof(a[100]) 表示 a 数组中的第 100 个元素的字节数,由于数组元素的类型未知,因此这个值可能不同,通常为 4 或 8 字节,具体取决于编译器和本机处理器架构。sizeof(&a) 表示 a 数组的指针的字节数,即整个数组的地址的字节数。在 64 位计算机上,通常为 8 字节,而在 32 位计算机上...

相似回答