基本数据类型的sizeof()
基本数据类型的sizeof
基本类型包括:bool ,char, short, int, long ,long long,float,double
32位编译器
指针都是4位
数据类型 | 大小 |
---|---|
bool | 1 |
char | 1 |
short | 2 |
int | 4 |
long | 4 |
long long | 8 |
float | 4 |
double | 8 |
64位编译器
指针都是8位
数据类型 | 大小 |
---|---|
bool | 1 |
char | 1 |
short | 2 |
int | 4 |
long | 8 |
long long | 8 |
float | 4 |
double | 8 |
2.结构体
结构体的sizeof涉及到字节对齐问题
注意:空结构体(不含数据成员)的sizeof值为1。这个和类是一样的。
struct A { char a; int b; }; sizeof(A); //值为8,字节对齐,在char之后会填充3个字节。 struct B { int b; char a; }; sizeof(B); //值为8,字节对齐,在char之后会填充3个字节。 struct C { }; sizeof(C); //值为1,空结构体也占内存
3.数组大小
char str[]="abcd";//大小是5,因为后面还有一个'\0',所以要+1 char *pStr="abcd";//大小是4,32系统,这里pStr是指针
void funA(char a[5]) { int len = sizeof(a);// len = 4,这函数里面,a不是数组类型,而是指针,所以大小是4 } void funB(char a[]) { int len = sizeof(a);// len = 4,这函数里面,a不是数组类型,而是指针,所以大小是4 }
4.指针
指针是用来记录另一个对象的地址,所以指针的内存大小当然就等于计算机内部地址总线的宽度。
在32位编译器中,一个指针变量的返回值必定是4。
指针变量的sizeof值与指针所指的对象没有任何关系。
char* str="123"; cout<<sizeof(str)<<endl;//4//这里是一个变量的大小 cout<<sizeof(*str)<<endl;//1,这里指的是一个char的大小 char *c[22]; cout<<sizeof(c)<<endl;//88,因为一个指针大小是4,22个指针就是88,所以大小是88 double *d; cout<<sizeof(d)<<endl;//4,这里是指针的大小 cout<<sizeof(*d)<<endl;//8,这里是一个double变量的大小 long long **L; cout<<sizeof(L)<<endl;//4,指针大小 cout<<sizeof(*L)<<endl;//4,指针大小 cout<<sizeof(**L)<<endl;//8,long long 大小 void (*pf)();//这是一个函数指针 cout<<sizeof(pf)<<endl;//4,指针大小