sizeof是编译时运算符,计算变量或类型所占字节数,对数组返回总大小,对指针返回指针本身大小(如8字节),包含'\0';strlen是运行时函数,计算字符串实际字符数,不包含'\0',需以'\0'结尾,仅适用于C风格字符串。

sizeof 和 strlen 在 C++ 中都与“大小”有关,但它们的作用完全不同。理解它们的区别对正确处理内存和字符串至关重要。
sizeof 是编译时运算符,计算的是内存占用
sizeof 用于获取数据类型或变量在内存中所占的字节数,结果在编译时确定。它不关心内容,只关心类型或对象的存储空间大小。
- 对数组使用 sizeof,返回整个数组的字节长度
- 对指针使用 sizeof,返回指针本身的大小(如 8 字节在 64 位系统)
- 对字符串字面量使用 sizeof,包含末尾的 '\0' 空字符
char str[] = "hello";
sizeof(str); // 结果是 6(5 个字符 + 1 个 \0)
strlen 是函数,计算字符串实际长度
strlen 定义在
- 只能用于以 '\0' 结尾的字符数组或字符串指针
- 运行时计算,依赖字符串内容
- 对指针指向的字符串有效,但无法检测数组越界
char* ptr = "hello";
strlen(ptr); // 结果是 5
常见误区对比
当使用指针指向字符串时,sizeof 和 strlen 表现差异明显:
立即学习“C++免费学习笔记(深入)”;
- char* s = "hello"; sizeof(s) 返回指针大小(通常是 8),而 strlen(s) 返回 5
- sizeof 不区分字符串内容,int、double 类型照样能用
- strlen 只适用于 C 风格字符串,对普通数组或非字符串指针调用可能导致未定义行为
基本上就这些。记住:sizeof 看的是“占了多少空间”,strlen 数的是“有多少字符”。用错地方容易引发内存相关 bug。









