sizeof 运算符
来自 cppreference.com
查询对象或类型的尺寸。
在必须知道对象实际大小的情况下使用。
内容 |
[编辑] 语法
sizeof( type ) |
(1) | ||||||||
sizeof expression
|
(2) | ||||||||
这两个版本都返回类型为 size_t 的值。
[编辑] 解释
2) 返回 expression 类型对象的表示的大小(以字节为单位)。不会对 expression 应用任何隐式转换。
[编辑] 注释
根据计算机体系结构,一个 字节 可能包含 8 个或更多位,确切的位数作为 CHAR_BIT 提供。
sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 始终返回 1。
sizeof 不能用于函数类型、不完全类型(包括 void)或 位域 左值。
当应用于具有 结构体 或 联合体 类型的操作数时,结果是该对象中所有字节的总数,包括内部填充和尾部填充。尾部填充使得如果该对象是数组中的一个元素,则此数组的下一个元素的对齐要求将得到满足,换句话说,sizeof(T) 返回 T[] 数组元素的大小。
如果 type 是一个 VLA 类型,并且更改其大小表达式的值不会影响 |
(自 C99 起) |
除非 expression 的类型是一个 VLA,(自 C99 起)expression 不会被求值,并且 sizeof
运算符可以在整数 常量表达式 中使用。
如果 expression 的类型是一个 可变长数组 类型,则 expression 将被求值,并且它求值到的数组的大小将在运行时计算。 |
(自 C99 起) |
任何 数组 a 包括 VLA(自 C99 起) 中的元素数量可以通过表达式 sizeof a / sizeof a[0] 来确定。请注意,如果 a 具有指针类型(例如在函数参数类型调整的数组到指针转换之后),此表达式将简单地将指针类型中的字节数除以指向类型的字节数。
[编辑] 关键字
[编辑] 示例
示例输出对应于具有 64 位指针和 32 位 int 的平台。
运行此代码
#include <stdio.h> 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: TBD)
- C17 标准 (ISO/IEC 9899:2018)
- 6.5.3.4 sizeof 和 _Alignof 运算符 (p: TBD)
- 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 运算符 |