sizeof operator
sizeof operator
查询对象或类型的大小。
在必须知道对象的实际大小时使用。
句法
sizeof( type ) | (1) | |
---|---|---|
sizeof expression | (2) | |
两个版本都返回一个类型值size_t
。
说明
1)返回类型的对象表示的大小(以字节为单位)
2)返回表达式类型的对象表示的大小(以字节为单位)
笔记
根据计算机体系结构的不同,一个字节可能由8个或更多位组成,确切的数字为CHAR_BIT
。
sizeof(char)
, sizeof(signed char)
, and sizeof(unsigned char)
always return 1
.
sizeof不能用于函数类型,不完整类型(包括void
)或位域左值。
当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾部填充。尾部填充是这样的:如果对象是数组的元素,则该数组的下一个元素的对齐要求将被满足,换句话说,sizeof(T)返回T []数组的元素的大小。
除非表达式的类型是VLA,否则(因为C99)表达式不计算,sizeof
操作符可能用于整型常量表达式。
如果表达式的类型是可变长度数组类型,则计算expression并在运行时计算其计算的数组大小。 | (自C99以来) |
---|
任何阵列中的元素数量,a
包括VLA(自C99开始)可以用表达式确定sizeof a / sizeof a[0]
。请注意,如果a
具有指针类型(例如在函数参数类型调整的数组到指针转换之后),则此表达式将简单地将指针类型中的字节数除以指向类型中的字节数。
关键词
sizeof
.
例
采样输出对应于具有64位指针和32位int的平台。
#include <stdio.h>
int main(void)
{
// type argument:
printf("sizeof(float) = %zu\n", sizeof(float)
printf("sizeof(void(*)(void)) = %zu\n", sizeof(void(*)(void))
printf("sizeof(char[10]) = %zu\n", sizeof(char[10])
// printf("sizeof(void(void)) = %zu\n", sizeof(void(void)) // Error: function type
// printf("sizeof(char[]) = %zu\n", sizeof(char[]) // Error: incomplete type
// expression argument:
printf("sizeof 'a' = %zu\n", sizeof 'a' // type of 'a' is int
// printf("sizeof main = %zu\n", sizeof main // Error: Function type
printf("sizeof &main = %zu\n", sizeof &main
printf("sizeof \"hello\" = %zu\n", sizeof "hello" // type is char[6]
}
可能的输出:
sizeof(float) = 4
sizeof(void(*)(void)) = 8
sizeof(char[10]) = 10
sizeof 'a' = 4
sizeof &main = 8
sizeof "hello" = 6