命名空间
变体
操作

sizeof 运算符

来自 cppreference.com
< c‎ | 语言

查询对象或类型的尺寸。

在必须知道对象实际大小的情况下使用。

内容

[编辑] 语法

sizeof( type ) (1)
sizeof expression (2)

这两个版本都返回类型为 size_t 的值。

[编辑] 解释

1) 返回 type对象表示 的大小(以字节为单位)。
2) 返回 expression 类型对象的表示的大小(以字节为单位)。不会对 expression 应用任何隐式转换。

[编辑] 注释

根据计算机体系结构,一个 字节 可能包含 8 个或更多位,确切的位数作为 CHAR_BIT 提供。

sizeof(char)sizeof(signed char)sizeof(unsigned char) 始终返回 1

sizeof 不能用于函数类型、不完全类型(包括 void)或 位域 左值。

当应用于具有 结构体联合体 类型的操作数时,结果是该对象中所有字节的总数,包括内部填充和尾部填充。尾部填充使得如果该对象是数组中的一个元素,则此数组的下一个元素的对齐要求将得到满足,换句话说,sizeof(T) 返回 T[] 数组元素的大小。

如果 type 是一个 VLA 类型,并且更改其大小表达式的值不会影响 sizeof 的结果,则该大小表达式是否被求值是未定义的。

(自 C99 起)

除非 expression 的类型是一个 VLA(自 C99 起)expression 不会被求值,并且 sizeof 运算符可以在整数 常量表达式 中使用。

如果 expression 的类型是一个 可变长数组 类型,则 expression 将被求值,并且它求值到的数组的大小将在运行时计算。

(自 C99 起)

任何 数组 a 包括 VLA(自 C99 起) 中的元素数量可以通过表达式 sizeof a / sizeof a[0] 来确定。请注意,如果 a 具有指针类型(例如在函数参数类型调整的数组到指针转换之后),此表达式将简单地将指针类型中的字节数除以指向类型的字节数。

[编辑] 关键字

sizeof

[编辑] 示例

示例输出对应于具有 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 运算符