基本数据类型的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,指针大小

 

posted @ 2022-10-09 21:33  kuailest  阅读(78)  评论(0编辑  收藏  举报