struct结构体中,对于对齐方式,首先以遇到的第一个类型对齐,之后以第二个类型对齐,之后依次,但遇到最大类型后,后面的全部以最大类型对齐。
系统如64位系统,则最大为8个字节。实例:
printf("char字节为:%d\n",sizeof(char)); //1
printf("short字节为:%d\n",sizeof(short)); //2
printf("int字节为:%d\n",sizeof(int)); //4
struct MyStruct7{
char a;
short b;
int c;
char d;
}t7; //sizeof(t7) ///此为1个字节,没有遇到更大的
struct MyStruct6{
char a;
short b;
int c;
char d;
}t6;
printf("%d\n",sizeof(t6)); //为12
首先char占据一个字节,之后遇到short 2B,则此时2B较大,故以2B补齐,此时a占2B,b占2B,遇到第三个c,4B,此时正好占满8B。
之后d为1B,但此时最大的为4B,必须补齐,故此时为12
char
str[]=
"Tencent"
; sizeof
(str)
为8 Tencent\0’,所以长度为8
har
* ch
sizeof
(ch)
其为指针,如果为win32,则为4
下面为参考善于总结的博客上,各个字节的大小;网址:http://blog.csdn.net/lyl0625/article/details/7350045
C语言中,各类型所占的字节数与机器字长及编译器有关系:
编译器类型 | 类型 | 占的字节数 |
16位编译器 | char | 1B |
char *(指针变量) | 2B | |
short int | 2B | |
int | 2B | |
unsigned int | 2B | |
float | 4B | |
double | 8 | |
long | 4 | |
long long | 8 | |
unsigned long | 4 | |
32位编译器 | char | 1 |
char*(指针变量) | 4B(32位的寻址空间) | |
short int | 2 | |
int | 4 | |
unsigned int | 4 | |
float | 4 | |
double | 8 | |
long | 4 | |
long long | 8 | |
ungigned long | 4 | |
64位编译器 | char | 1 |
char*(指针变量) | 8 | |
short int | 2 | |
int | 4 | |
unsigned int | 4 | |
float | 4 | |
double | 8 | |
long | 8 | |
long long | 8 | |
unsigned long | 8 |