由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则:一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍) 二、结构体大小必须是所有成员大小的整数倍。
struct stc1 { // sizeof( struct stc1) =12
char c1;
int i;
char c2;
};
struct stc2 { // sizeof(struct stc2) =8
char c1;
char c2;
int i;
};
用法sizeof 是操作符(非函数),它以字节形式给出其操作数的存储大小。
sizeof 操作结果类型是unsigned int。
对于不能确定存储大小的操作数,不能用sizeof。
对于变量可以 sizeof var_p,而数据类型必须用括号。
指针所占的存储空间是 4个字节,sizeof(ptr)=4。
对于数组,sizeof(array)为数组总字节数。
对于结构,则其大小为:成员个数 * 最大字节成员的字节数。
- // 指针
- int *ptr1; // sizeof(ptr1) 4
- int **ptr2; // sizeof(ptr2) 4
- double *ptr3; // sizeof(ptr3) 4
- long *ptr4; // sizeof(ptr4) 4
- // 基本数据类型
- int a; // sizeof(a) 或者 sizeof(a) 4
- double d; // 8
- long l; // 4
- // 数组
- int ar_a[2]; // sizeof ar_a 8
- int ar_b[3]={1,2}; // 12
- int ar_c[]={1,2}; // 4
- char ar_char[]={1}; // 1
- int cw[]; // sizeof(cw) 编译出错
- // 结构
- struct Sct {
- int d
- char a;
- double d;
- };
- // sizeof (struct Sct) 8*3=24
- struct S {
- int a;
- char c;
- } u;
- struct S q;
- // sizeof u 4*2=8
- // sizeof q 4*2=8
- // sizeof(struct S) 4*2=8
阅读(1311) | 评论(0) | 转发(0) |