在 C++ 中,sizeof
和 strlen
是两个常用的操作符/函数,但它们的作用和用法完全不同。以下是它们的详细区别:
1. sizeof
- 作用:
sizeof
是一个编译时操作符,用于计算数据类型或变量所占用的内存大小(以字节为单位)。 - 适用范围:
- 基本数据类型(如
int
、double
等)。 - 数组。
- 结构体或类。
- 指针。
- 基本数据类型(如
- 特点:
- 在编译时计算,结果是一个常量。
- 对于数组,返回整个数组的大小。
- 对于指针,返回指针本身的大小(通常是 4 或 8 字节,取决于系统架构)。
- 对于字符串,返回整个字符数组的大小(包括
\0
结束符)。
示例:
int a = 10;
double b = 3.14;
char str[] = "Hello";
std::cout << sizeof(a) << std::endl; // 输出 4(int 的大小)
std::cout << sizeof(b) << std::endl; // 输出 8(double 的大小)
std::cout << sizeof(str) << std::endl; // 输出 6(包括 '\0')
2. strlen
- 作用:
strlen
是一个运行时函数,用于计算 C 风格字符串(以\0
结尾的字符数组)的长度(不包括\0
)。 - 适用范围:
- 仅适用于 C 风格字符串(字符数组)。
- 特点:
- 在运行时计算,需要遍历字符串直到遇到
\0
。 - 返回字符串的实际长度(不包括
\0
)。 - 如果传入的字符数组不以
\0
结尾,行为是未定义的。
- 在运行时计算,需要遍历字符串直到遇到
示例:
char str[] = "Hello";
std::cout << strlen(str) << std::endl; // 输出 5(不包括 '\0')
3. sizeof
和 strlen
的区别
特性 | sizeof | strlen |
---|---|---|
类型 | 编译时操作符 | 运行时函数 |
作用 | 计算数据类型或变量占用的内存大小(字节) | 计算 C 风格字符串的长度(不包括 \0 ) |
适用范围 | 基本类型、数组、结构体、类、指针等 | 仅适用于 C 风格字符串 |
返回值 | 整个变量或类型的大小 | 字符串的实际长度(不包括 \0 ) |
是否包含 \0 | 包含 \0 (如果是字符数组) | 不包含 \0 |
计算时机 | 编译时 | 运行时 |
4. 示例对比
char str[] = "Hello";
std::cout << sizeof(str) << std::endl; // 输出 6(包括 '\0')
std::cout << strlen(str) << std::endl; // 输出 5(不包括 '\0')
5. 总结
sizeof
:用于计算变量或类型的内存大小,适用于所有类型,编译时计算。strlen
:用于计算 C 风格字符串的长度,仅适用于字符数组,运行时计算。
理解它们的区别有助于避免在编程中混淆它们的使用场景。
THE END
暂无评论内容