sizeof是一个单目运算符,优先级为2,它的用途是:由于数据类型随系统运行环境可能导致不同,因此要知道一个变量在所有情况下的大小是很困难的,所以C定义了编译时运算符,sizeof
sizeof(操作数);
1.若操作数是char,unsigned char ,signed char,则返回值一定是1,因为ANSI C规定字符类型就是1个字节,下面三种写法都会打印出1
printf("%d", sizeof(char));
printf("%d", sizeof(unsigned char));
printf("%d", sizeof(signed char));
2.除了1中的类型之外,其他的类型ANSI C没有规定,所以返回值依赖于具体的实现
3.当操作数是指针时,sizeof依赖于具体的编译器
4.当操作数是数组时,返回值是数组占用的总内存字节数,下面示例会打印出16
int a[] = {1,2,3,4};
printf("%d", sizeof(a));
5.当操作数是联合类型,则返回该联合体内最大的那个成员类型所占用的字节数,下面的示例会打印出8
union MyUnion
{
int a;
double b;
char c;
};
MyUnion ys;
printf("%d",sizeof(ys));
6.当操作数是结构体时,则返回的是该结构体所有成员类型+不同编译器考虑对齐的情况,也就是说,最终还是取决于不同的编译器,例如下面的代码在我的visual studio 2017下打印出8
struct MyStruct
{
char a[3];
int b;
};
MyStruct ys;
printf("%d",sizeof(ys));
总结:总体来说,sizeof会返回操作数所占了内存多少个字节