sizeof
运算符
产生与 char
类型的大小有关的操作数大小。
注意
有关 sizeof ...
运算符的信息,请参阅省略号和可变参数模板。
语法
sizeof unary-expression
sizeof ( type-name )
备注
sizeof
运算符的结果是 size_t
类型,它是包含文件 <stddef.h> 中定义的整数类型。 利用此运算符,你可以避免在程序中指定依赖于计算机的数据大小。
sizeof
的操作数可以是下列项之一:
类型名称。 若要将
sizeof
用于类型名称,则该名称必须用括号括起。一个表达式。 与表达式一起使用时,可以使用或不使用括号指定
sizeof
。 不计算表达式。
当 sizeof
运算符应用到 char
类型的对象时,它将生成 1。 当 sizeof
运算符应用到数组时,它将产生该数组的字节总数,而非由数组标识符表示的指针的大小。 若要获取由数组标识符表示的指针的大小,请将它作为参数传递给使用 sizeof
的函数。 例如:
示例
#include <iostream>
using namespace std;
size_t getPtrSize( char *ptr )
{
return sizeof( ptr );
}
int main()
{
char szHello[] = "Hello, world!";
cout << "The size of a char is: "
<< sizeof( char )
<< "\nThe length of " << szHello << " is: "
<< sizeof szHello
<< "\nThe size of the pointer is "
<< getPtrSize( szHello ) << endl;
}
示例输出
The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4
当 sizeof
运算符应用于 class
、struct
或 union
类型时,结果是该类型对象中的字节数,加上为对齐字边界上的成员而添加的任何填充。 结果不一定对应于通过将各个成员的存储需求相加计算出的大小。 /Zp 编译器选项和 pack pragma 会影响成员的对齐边界。
sizeof
运算符永远不会产生 0,即使对于空类也是如此。
sizeof
运算符不能用于以下操作数:
函数。 (但是,
sizeof
可应用于指向函数的指针。)位域。
未定义的类。
void
类型。动态分配的数组。
外部数组。
不完整类型。
带括号的不完整类型的名称。
将 sizeof
运算符应用于引用时,结果与将 sizeof
应用于对象本身一样。
如果某个未确定大小的数组是结构的最后一个元素,则 sizeof
运算符将返回没有该数组的结构的大小。
sizeof
运算符通常用于使用以下形式的表达式计算数组中的元素数:
sizeof array / sizeof array[0]
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈