C
编译器支持
语言
头文件
类型支持
程序工具
变参函数支持
错误处理
动态内存管理
字符串库
算法
数值
日期和时间工具
输入/输出支持
本地化支持
并发支持 (C11)
技术规范
符号索引
[编辑] C 语言
基本概念
关键词
预处理器
语句
表达式
初始化
声明
函数
杂项
C 的历史
技术规范
[编辑] 表达式
通用
值类别
求值顺序和序列点
常量表达式
隐式转换
泛型选择 (C11)
常量和字面量
整型常量
浮点常量
字符常量
真/假(C23)
nullptr(C23)
字符串字面量
复合字面量 (C99)
运算符
运算符优先级
成员访问和间接寻址
逻辑运算符
比较运算符
算术运算符
赋值运算符
增量和减量
函数调用、逗号、条件运算符
sizeof
_Alignof(C11*)
类型转换运算符
[编辑]
查询对象或类型的大小。
当需要知道对象的实际大小时使用。
目录
1 语法
2 解释
3 注意
4 关键词
5 示例
6 引用
7 参阅
[编辑] 语法
sizeof( 类型 )
(1)
sizeof 表达式
(2)
这两种版本都返回 size_t 类型的值。
[编辑] 解释
1) 返回 类型 的对象表示的大小(以字节为单位)
2) 返回 表达式 的类型的对象表示的大小(以字节为单位)。不应用隐式转换到 表达式。
[编辑] 注意
根据计算机架构,一个字节可能由 8 位或更多位组成,确切的位数由 CHAR_BIT 提供。
sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 总是返回 1。
sizeof 不能用于函数类型、不完整类型(包括 void)或位域左值。
当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾随填充。尾随填充使得如果该对象是数组的一个元素,则满足该数组的下一个元素的对齐要求,换句话说,sizeof(T) 返回 T[] 数组中一个元素的大小。
如果 类型 是 VLA 类型,并且更改其大小表达式的值不会影响 sizeof 的结果,则是否评估大小表达式是未指定的。
(C99 起)
除非 表达式 的类型是 VLA,(C99 起)表达式 不会被评估,并且 sizeof 运算符可以在整数常量表达式中使用。
如果 表达式 的类型是变长数组类型,则 表达式 会被评估,并且它所评估的数组的大小会在运行时计算。
(C99 起)
数组 a 中的元素数量(包括 VLA)(C99 起)可以通过表达式 sizeof a / sizeof a[0] 来确定。请注意,如果 a 具有指针类型(例如在数组到指针转换或函数参数类型调整之后),此表达式将简单地将指针类型中的字节数除以指向类型中的字节数。
[编辑] 关键词
sizeof
[编辑] 示例
示例输出对应于具有 64 位指针和 32 位 int 的平台
运行此代码
#include
int main(void)
{
short x;
// 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]
printf("sizeof x = %zu\n", sizeof x); // type of x is short
printf("sizeof (x+1) = %zu\n", sizeof(x + 1)); // type of x+1 is int
}
可能的输出
sizeof(float) = 4
sizeof(void(*)(void)) = 8
sizeof(char[10]) = 10
sizeof 'a' = 4
sizeof &main = 8
sizeof "hello" = 6
sizeof x = 2
sizeof (x+1) = 4
[编辑] 参考
C23 标准 (ISO/IEC 9899:2024)
6.5.3.4 sizeof 和 alignof 运算符 (p: 待定)
C17 标准 (ISO/IEC 9899:2018)
6.5.3.4 sizeof 和 _Alignof 运算符 (p: 待定)
C11 标准 (ISO/IEC 9899:2011)
6.5.3.4 sizeof 和 _Alignof 运算符 (p: 90-91)
C99 标准 (ISO/IEC 9899:1999)
6.5.3.4 sizeof 运算符 (p: 80-81)
C89/C90 标准 (ISO/IEC 9899:1990)
3.3.3.4 sizeof 运算符
[编辑] 另请参见
C++ 文档 关于 sizeof 运算符