- 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 条评论
目前还没有评论...