sizeof 是 C/C++ 中的一个操作符,用于获取变量、类型或对象所占的内存字节数。它是一个编译时操作符,在编译阶段就确定了变量的大小。
✅ 一、基本用法
1. 获取变量的大小
#include <iostream>
int main() {
int a = 10;
std::cout << "sizeof(int) = " << sizeof(int) << " bytes" << std::endl; // 输出: 4 bytes
std::cout << "sizeof(a) = " << sizeof(a) << " bytes" << std::endl; // 输出: 4 bytes
std::cout << "sizeof(float) = " << sizeof(float) << " bytes" << std::endl; // 输出: 4 bytes
std::cout << "sizeof(double) = " << sizeof(double) << " bytes" << std::endl; // 输出: 8 bytes
return 0;
}
2. 获取类型大小
#include <iostream>
int main() {
std::cout << "sizeof(int) = " << sizeof(int) << " bytes" << std::endl; // 4 bytes
std::cout << "sizeof(float) = " << sizeof(float) << " bytes" << std::endl; // 4 bytes
std::cout << "sizeof(double) = " << sizeof(double) << " bytes" << std::endl; // 8 bytes
std::cout << "sizeof(long double) = " << sizeof(long double) << " bytes" << std::endl; // 16 bytes
return 0;
}
✅ 二、sizeof 的特点
| 特性 | 说明 |
|---|---|
| 编译时计算 | sizeof 是编译时操作符,不会在运行时计算。 |
| 返回的是字节数 | 返回的是 size_t 类型的值,单位是字节。 |
| 不带类型 | sizeof 不需要类型,直接写在变量或类型后面。 |
| 支持类型 | 可以直接写类型,例如 sizeof(int),也可以写变量名。 |
| 支持结构体、数组、指针等 | 可以用于任何类型,包括结构体、数组、指针等。 |
✅ 三、常见用法示例
1. 结构体大小
struct MyStruct {
int a;
float b;
};
int main() {
std::cout << "sizeof(MyStruct) = " << sizeof(MyStruct) << " bytes" << std::endl; // 输出: 8 bytes
return 0;
}
2. 数组大小
int arr[10];
std::cout << "sizeof(arr) = " << sizeof(arr) << " bytes" << std::endl; // 输出: 40 bytes
3. 指针大小
int* ptr = new int;
std::cout << "sizeof(ptr) = " << sizeof(ptr) << " bytes" << std::endl; // 输出: 8 bytes
✅ 四、sizeof 的注意事项
-
不能用于变量:
sizeof不能直接用于变量,只能用于类型或变量名。int a; std::cout << sizeof(a); // 正确 // std::cout << sizeof(a); // 错误(变量名不能直接用于 sizeof) -
不能用于数组元素:
sizeof不能直接用于数组元素。int arr[10]; std::cout << sizeof(arr[0]); // 错误 -
sizeof会返回size_t类型:sizeof的返回值是size_t,在 C++11 之后支持sizeof的返回值为size_t。
✅ 五、总结
| 项目 | 说明 |
|---|---|
| 操作符 | sizeof |
| 作用 | 获取变量、类型或对象的内存大小 |
| 返回值 | size_t 类型,单位是字节 |
| 使用方式 | sizeof(类型) 或 sizeof(变量名) |
| 适用范围 | 所有类型(包括结构体、数组、指针等) |
如果你有具体的代码想分析,或者想知道 sizeof 在某些特定场景下的使用,欢迎继续提问!