@[TOC]从头梳理一遍c,记录以前不注意的点,以前没注意现在踩了一堆坑
sizeof()
常用一元操作符,计算类型所占内存大小,多少个字节。
sizeof对对象求内存大小,最终都是转换为对对象的数据类型进行求值。
sizeof (表达式); //值为表达式的最终结果的数据类型的大小
1.结构体的sizeof
按照结构体中最宽的字节进行字节对齐,空结构体字节为1。内存是顺序存储。
2.联合体的sizeof
联合体的sizeof也就是每个成员sizeof的最大值,内存共享。
3.数组的sizeof
数组的sizeof值等于数组所占用的内存字节数。就是数组大小*类型字节大小。
另外,函数形参传参可能只计算指针sizeof()。
4.指针的sizeof
在32位计算机中,一个指针变量的返回值必定是4。16位系统返回2。64位系统返回8.
char *b = “helloworld”; sizeof(b)=4;sizeof(*b)=1;
char b[]= “helloworld”;sizeof(b)=11;
char *b[] ={ “helloworld”}; sizeof(b)=4;sizeof(b[0])=4;
char *c[10]; sizeof©=40;
double *d;
int **e; sizeof(e)=4;
void (*pf)(); sizeof(pf)=4;//函数传递数组退化为指针,除非引用
int *p=new int[10];sizeof§=4;
申请10个整型变量空间,没有赋初值,并定义一个整型指针p指向该地址空间开始处,sizeof计算的只是一个指针,而不是数组。