定义:sizeof( )
作用:返回一个对象或类型的内存字节数
1.数据类型字节大小(64位编译器)
2.数组的sizeof
char ss2[]="0123456789";
char ss3[100]="0123456789";
int ss4[100];
char q1[]="abc";
char q2[]="a\n";
cout<<sizeof(ss2)<<endl;
cout<<sizeof(ss3)<<endl;
cout<<sizeof(ss4)<<endl;
cout<<sizeof(q1)<<endl;
cout<<sizeof(q2)<<endl;
解析:
ss2为未初定大小的字符数组:返回具体填充个数+字符串结束符\0,既10+1=11
ss3为预分配大小的字符串数组:返回设定大小,100
ss4为预分配大小的整型数组:返回设定大小*每个整形变量所占字节,100*4=400
q1为未初定大小字符型数组,3+1=4
q2返回3
3.结构体的sizeof:
结构体涉及字节对齐:字节对齐加快计算机取数速度。编译器对结构体进行处理,让宽度为2的基本数据类型都位于被2整除的地址上,让宽度为4的数据类型位于被4整除的地址上,这样两个类型之间可能需要填充字节。
1.结构体内元素长度<处理器位数:结构体长度是最长数据元素的整数倍
2.结构体内元素长度>处理器位数:结构体长度为处理器位数的整数倍
3.空结构体:内存为1(空结构体不包含任何信息,但是当声明该结构体类型的实例时必须在内存中占用一定的内存空间,否则无法使用)
struct{
short a1;
short a2;
short a3;
}A;
struct{
long a1;
short a2;
}B;
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
结构体A中3个short类型变量,各自2字节对齐,结构体大小为6是2的倍数。返回6
结构体B中a1为8字节,a2为2字节,结构体大小为10不是8的整数倍,因此布控字节,增加为16为8的整数倍。返回16
4.指针的sizeof
char* ss1="0123456789";
char* q3="a\n";
char* q4[10];
cout<<sizeof(ss1)<<endl;
cout<<sizeof(q3)<<endl;
cout<<sizeof(q4)<<endl;
ss1为字符指针:返回8字节
q3为字符指针类型返回8
q4为指针数组,返回8*10=80
5.函数的sizeof:
sizeof(函数名(实参值))函数返回值类型大小(不可以对函数返回值为空的函数求值)
void (*pf)(pf);
float func(int a,float b){
return a+b;
}
cout<<sizeof(pf);
cout<<sizeof(func(3,0.4));
函数指针8
返回函数返回值类型为float为4