• C++
  • sizeof是 C 和 C++ 中的一个操作符

  • @ 2025-9-1 10:02:21

在C++中,sizeof是一个编译时运算符,用于确定变量或类型在内存中的大小,以字节为单位。以下是关于sizeof的详细教程:

基本用法

  • 语法
    • sizeof(类型):直接指定类型来获取该类型的大小,如sizeof(int)
    • sizeof(表达式):根据表达式结果类型计算大小,如int x = 10; sizeof(x);
    • sizeof 对象:这种用法不常用,如int arr[5]; sizeof arr;

对不同数据类型的应用

  • 基本数据类型sizeof可用于获取基本数据类型的大小,例如sizeof(char)通常为1字节,sizeof(int)在常见平台上为4字节,sizeof(double)为8字节等。不同平台上基本数据类型的大小可能有所不同。
  • 指针类型:指针变量的大小取决于系统的位数,在32位系统中通常为4字节,在64位系统中通常为8字节。例如int* p; sizeof(p);,无论p指向何种类型的数据,其sizeof结果都是固定的。
  • 数组类型:当sizeof作用于静态数组时,会返回整个数组占用的字节数。例如int arr[10]; sizeof(arr)的值为10 * sizeof(int)。但要注意,当数组作为函数参数传递时,会退化为指针,此时sizeof无法正确计算数组大小。例如:
void func(int arr[]) {
    cout << sizeof(arr) << endl; // 输出指针大小
}
int main() {
    int arr[5];
    func(arr); 
}
  • 结构体和类sizeof可以用于获取结构体或类对象的大小。结构体或类的大小可能受内存对齐规则的影响,会大于等于其成员变量大小之和。例如:
struct Example {
    char c; // 1 字节(对齐到 4 字节边界)
    int i; // 4 字节
};
cout << sizeof(Example) << endl; // 输出 8(1 + 3填充 + 4)

对于空类,其大小为1字节。如果类中包含虚函数,不管有多少个虚函数,都只有一个虚指针,在32位系统中虚指针大小为4字节,在64位系统中为8字节。

  • 引用类型sizeof作用于引用类型时,返回的是所引用对象的大小。例如int a = 10; int& ref = a; sizeof(ref);,结果为sizeof(int)
  • 函数sizeof可以对函数调用求值,结果是函数返回值类型的大小,函数并不会被调用执行。例如:
double doufun(int a, double b){ return a + b; }
cout << sizeof(doufun(1, 1.5)) << endl; // 函数返回double,输出8

sizeof的作用

  • 内存管理:在动态分配内存时,可使用sizeof来确定需要分配的内存大小。例如int* dynamicArray = new int[sizeof(int) * n];,其中n是所需整数的数量。
  • 数组大小计算:可以通过sizeof计算数组的元素个数,如int arr[10]; int count = sizeof(arr) / sizeof(arr[0]);count的值为10。
  • 类型大小确定:在编写与平台或编译器相关的代码时,sizeof可用于确定特定类型的大小,提高代码的可移植性。
  • 性能优化:在某些情况下,可使用sizeof来确定是否可以在不进行类型转换的情况下执行某些操作,例如两个指针类型大小相同,则可以安全地执行指针算术运算。

0 条评论

目前还没有评论...