sizeof
// sizeof 的使用方式
// 1. 传入数据类型
sizeof(int) // int 通常为 4
sizeof(void*) // 在 64 位系统上通常为 8
// 2. 传入变量
int x;
sizeof(x); // 等价于 sizeof(int),返回 4
// 3. 传入整个数组:计算的是字节数,不是元素数量
int arr[10];
sizeof(arr); // 返回整个数组所占字节数 = 10 * sizeof(int) = 40(假设 int 是 4 字节)
// 4. 传入数组和指针的区别
int arr[10];
int* p = arr;
sizeof(arr); // 返回整个数组大小,10 * sizeof(int) = 40
sizeof(p); // 返回指针大小(通常为 8 在64位系统)
void func(int arr[]) { // 特别注意:
sizeof(arr); // 实际是 sizeof(int*),因为数组退化成了指针
}
// 5. 传入类或结构体
struct A {
char a;
int b;
};
sizeof(A); // 通常是 8,而不是 5,结构体会按平台对齐补齐空隙
// 6. 计算数组长度
int arr[10];
size_t count = sizeof(arr) / sizeof(arr[0]); // = 10
// 7. sizeof 不会实际计算表达式或函数
int foo() { std::cout << "called\n"; return 42; }
sizeof(foo()); // 不会调用 foo(),因为 sizeof 在编译时计算