命名空间
变体
操作

sizeof 运算符

来自 cppreference.cn
< c‎ | language

查询对象或类型的大小。

当需要知道对象的实际大小时使用。

目录

[编辑] 语法

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[] 数组的元素大小。

如果 typeVLA 类型,并且更改其大小表达式的值不会影响 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 运算符 (页码:待定)
  • C17 标准 (ISO/IEC 9899:2018)
  • 6.5.3.4 sizeof 和 _Alignof 运算符 (页码:待定)
  • C11 标准 (ISO/IEC 9899:2011)
  • 6.5.3.4 sizeof 和 _Alignof 运算符 (页码:90-91)
  • C99 标准 (ISO/IEC 9899:1999)
  • 6.5.3.4 sizeof 运算符 (页码:80-81)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 3.3.3.4 sizeof 运算符

[编辑] 参见

C++ 文档 关于 sizeof 运算符