sizeof
运算符返回指定变量或数据类型在内存中占用的字节大小 。这在不同的系统上可能有所不同,除了 char
和它的变体,始终为 1 个字节。
由于 sizeof
计算存储类型所需的字节数,因此您可能认为 sizeof
会返回一个 int
或者大小不能为负的整数,也许是一个 unsigned
。
但事实证明 C 有一种类型来表示 sizeof
的返回值。它是 size_t
发音为 “ size tee ”。它是一个无符号整数类型 unsigned int
,可以保存 sizeof
返回的任何值。
您可以使用 sizeof
确定变量或表达式所占内存的字节大小:
int a = 999;
// %zu 是类型 size_t 的格式化占位符
printf("%zu\n", sizeof a); // Prints 4 on my system
printf("%zu\n", sizeof(2 + 7)); // Prints 4 on my system
printf("%zu\n", sizeof 3.14); // Prints 8 on my system
请记住 sizeof
运算符返回的是表达式类型的大小 ,而不是表达式本身的大小。这就是为什么 2+7
的大小与 a
的大小相同,因为它们都是 int
类型。
您也可以使用 sizeof
直接计算数据类型占用内存的字节大小。有一点值得注意的是,与表达式不同,类型名称周围需要括号:
printf("%zu\n", sizeof(int)); // Prints 4 on my system
printf("%zu\n", sizeof(char)); // Prints 1 on all systems
sizeof 计算数组大小
更重要的是,sizeof
是一个编译时操作。表达式的结果完全在编译时确定,而不是在运行时确定。
当数组是函数的参数时, sizeof
不能正确返回数组的大小的原因。编译器会把数组参数当作指针对待, 因而 sizeof
返回的是指针的大小。