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 运算符