sizeof()计算数组结构体类大小长度
sizeof()是一个操作符,用来计算长度的,下面程序详细解释了数组,字符,结构体,类等的长度计算方法
32位机器 VC下测试
// sizeof.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdlib.h" #include "iostream.h" //数据对其原则 /*******结构体计算大小的原则******************************************************************************* *成员偏移量为(本成员)大小的整数倍,否则补齐 *注1:若本成员为嵌套结构体,大小为第一个成员大小 *注2:若成员为数组,大小为数组一个成员的大小,若为空数组(未指定大小也未指定成员),不占用空间 *结构体总大小为结构体中最宽成员(嵌套结构体的话是嵌套成员中的最宽并不是嵌套整体大小)大小的整数倍,否则补齐 **********************************************************************************************************/ struct{ char a;//偏移量为0,大小为1,0能被1整除,=1 short b;//偏移量为1,大小为2,1不能被2整除,=1+1+2=4 int c;//偏移量为4,大小为4,4能被4整除,=4+4=8 long d;//偏移量为8,大小为4,8能被4整除,=8+4=12 }A;//大小为12,12能被最宽4整除,所以大小为12 struct { long a;//偏移量为0,大小为4,0能被4整除,=4 short b;//偏移量为4,大小为2,4能被2整除,=4+2=6 }B;//大小为6,6不能被最宽4整除,=6+2=8 class A1 { public: int a; static int b;//静态变量保存数据全局区,sizeof查找的是栈区,所以不占用栈区大小 };//=4 /******************************************************* *类和结构体相同的原理 ********************************************************/ class A2 { public: int a; char c; };//=8 class A3 { public: float a; char c; };//=8 class A4 { public: float a; int b; char c; };//=12 class A5 { public: double d; float a; int b; short s; char c; char c2; };//20不能被最宽8整除,=24 class A6 { public: float f;//偏移量为0,大小为4,=4 char p;//偏移量为4,大小为1,=4+1=5 int adf[3];//偏移量为5,单个数组成员大小为4,5不能被4整除,=5+3+4*3=20 };//=20 class A7 { A7(); ~A7(); };//空类大小为1 class A8 { char c1; int i; short s; char c2; char a[];//未指定大小的数组且未填充值,不占用内存 };//大小11不能被4整除,=12 class A9 { int i;//偏移量为0,大小为4,0能被4整除,=4 A5 a5;//偏移量为4,嵌套结构体第一个成员大小为8,4不能被8整除,=4+4+24=32 char c2;//偏移量为32,大小为1,=32+1=33 };//大小为33,33不能被最宽(包括嵌套中的最宽)8整除,=40 class A10 { public: virtual int fo0() { } virtual void fo1() { } };//只要有虚函数就相当于存在一个指针,大小为4 int f() { return 0; }//int 的大小 int main(int argc, char* argv[]) { char *ss1="012345"; char ss2[]="012345"; char ss3[100]="012345"; int ss4[100]; int ss5[2][3]; char q2[]="a "; char *str1=(char*)malloc(100); cout<<"sizeof(char)="<<sizeof(char)<<" ";//1 cout<<"sizeof(short)="<<sizeof(short)<<" ";//2 cout<<"sizeof(int)="<<sizeof(int)<<" ";//4 cout<<"sizeof(long)="<<sizeof(long)<<" ";//4 cout<<"sizeof(float)="<<sizeof(float)<<" ";//4 cout<<"sizeof(double)="<<sizeof(double)<<" ";//8 cout<<"sizeof(ss1)="<<sizeof(ss1)<<" ";//4 指针占用四个字节 cout<<"sizeof(ss2)="<<sizeof(ss2)<<" ";//7 未指定大小的数组是数组成员的大小,注意字符串最后有 占用一个字节 cout<<"sizeof(ss3)="<<sizeof(ss3)<<" ";//100 指定大小的数组是数组大小*成员大小 cout<<"sizeof(ss4)="<<sizeof(ss4)<<" ";//400 指定大小的数组是数组大小*成员大小 cout<<"sizeof(ss5)="<<sizeof(ss5)<<" ";//24 多维数组是位数乘积乘以数组元素大小 cout<<"sizeof(q2)="<<sizeof(q2)<<" ";//3 注意 占一个字节 cout<<"sizeof(str1)="<<sizeof(str1)<<" ";//4 指针 cout<<"sizeof(A)="<<sizeof(A)<<" ";//12 cout<<"sizeof(B)="<<sizeof(B)<<" ";//8 cout<<"sizeof(A1)="<<sizeof(A1)<<" ";//4 cout<<"sizeof(A2)="<<sizeof(A2)<<" ";//8 cout<<"sizeof(A3)="<<sizeof(A3)<<" ";//8 cout<<"sizeof(A4)="<<sizeof(A4)<<" ";//12 cout<<"sizeof(A5)="<<sizeof(A5)<<" ";//24 cout<<"sizeof(A6)="<<sizeof(A6)<<" ";//20 cout<<"sizeof(A7)="<<sizeof(A7)<<" ";//1 cout<<"sizeof(A8)="<<sizeof(A8)<<" ";//12 cout<<"sizeof(A9)="<<sizeof(A9)<<" ";//40 cout<<"sizeof(A10)="<<sizeof(A10)<<" ";//4 cout<<"sizeof(f())="<<sizeof(f())<<" ";//4 printf("Hello World! "); return 0; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: HTML中用i作小图标