1、

void fun(char ch[])
{
cout<<sizeof(ch)<<endl; //或者sizeof(ch)=?;
}

这种情况,数组名作为形参,退化成指针,所以sizeof结果是4(32位编译器);

2、

int *p=(int *)malloc();

cout<<sizeof(p)<<endl;

答案为4(32位编译器)。

sizeof(p)只能测定指针大小,sizeof不能测定动态分配的数组大小

3、

    int x[]={};
cout<<sizeof(x)<<endl;
int y[]={,,,};
cout<<sizeof(y)<<endl;

输出:40    16

4、结构体

C语言 - 结构体所占字节数      内容有点多,可以多看几遍

结构体所占空间大小的运算

关于结构体所占字节数,内存对齐心得

【C语言】结构体占用字节数及存储与空间分配

5、共用体:共用体的各个成员占用共同的存储单元,具有相同的首地址,占用存储单元最多的成员的长度就是共用体的长度。

    struct stru{char c;int a;};
union uni{char c;int a;}; struct stru st={};
union uni un={};
cout<<sizeof(st)<<endl;
cout<<sizeof(un)<<endl;

32位编译器输出:

8

4

05-24 08:20