// 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 在编译时计算