sizeof运算符

一、sizeof运算符的概念

sizeof 是 C++ 中的一个单目运算符,用于计算某种类型的对象在内存中所占用的字节数。它可以用来查看变量、常量、表达式结果或数据类型本身所占用的存储空间大小。

二、sizeof运算符的两种使用格式

格式一:sizeof(类型名)

sizeof(int)
sizeof(double)

格式二:sizeof 表达式

sizeof f
sizeof (f * 12)

注意:当 sizeof 的操作数是类型名时,必须加括号;当操作数是表达式或变量名时,括号可以省略,但为了代码清晰,通常建议加上。

三、运算规则与特点

sizeof 运算的结果是一个 size_t 类型的整数值,表示指定类型或表达式结果类型所占用的字节数。

关键特性:sizeof 在编译阶段完成计算,不会对括号内的表达式进行实际求值。编译器只根据表达式的结果类型来确定字节数,不会执行表达式中的运算。

示例说明:

int a = 10;
cout << sizeof(a++) << endl;   // 输出 int 类型的字节数(通常为4)
cout << a << endl;             // a 的值仍然是 10,a++ 并未执行Code language: JavaScript (javascript)

四、代码示例

以下代码演示了 sizeof 运算符的各种用法:

#include <iostream>
using namespace std;

int main()
{
    // 计算基本数据类型所占字节数
    cout << "sizeof(int) = " << sizeof(int) << endl;
    cout << "sizeof(double) = " << sizeof(double) << endl;
    cout << "sizeof(char) = " << sizeof(char) << endl;
    cout << "sizeof(float) = " << sizeof(float) << endl;
    cout << "sizeof(bool) = " << sizeof(bool) << endl;
    cout << "sizeof(short) = " << sizeof(short) << endl;
    cout << "sizeof(long) = " << sizeof(long) << endl;

    // 计算变量所占字节数
    float f = 12.3;
    cout << "sizeof(f) = " << sizeof(f) << endl;
    cout << "sizeof f = " << sizeof f << endl;   // 括号可以省略

    // 计算表达式结果类型所占字节数
    cout << "sizeof(f * 12) = " << sizeof(f * 12) << endl;
    // f * 12 的结果类型为 double(float 与 int 运算提升为 double)
    // 输出 double 类型的字节数(通常为8)

    // 计算表达式但不求值
    int x = 5;
    cout << "sizeof(x = x + 1) = " << sizeof(x = x + 1) << endl;
    cout << "x after sizeof = " << x << endl;
    // x 的值仍然是 5,赋值操作没有执行

    // 类型名必须加括号
    // cout << sizeof char << endl;   // 错误:类型名必须加括号

    return 0;
}Code language: PHP (php)

五、常见注意事项

  • 对类型名使用 sizeof 时,括号不能省略。例如 sizeof(int) 正确,sizeof int 错误。
  • 对变量或表达式使用 sizeof 时,括号可以省略,但建议保留以提高可读性。
  • sizeof 不会计算表达式的值,因此不会产生副作用。
  • 对于数组,sizeof 返回整个数组占用的总字节数,而非数组元素个数。要计算元素个数,需用 sizeof(数组名) / sizeof(数组元素类型)。
  • 对于指针,sizeof 返回指针本身所占的字节数,而非指针指向的对象大小。

六、小结

  • sizeof 是编译期运算符,用于计算类型或对象所占内存字节数。
  • 格式为 sizeof(类型名) 或 sizeof 表达式。
  • 类型名必须加括号,表达式的括号可省略。
  • sizeof 不执行表达式,不产生副作用。
  • 常用于内存分配、数组长度计算等场景。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注