面试题:C++ 中 sizeof 和 strlen 的区别?

在 C++ 中,sizeof 和 strlen 是两个常用的操作符/函数,但它们的作用和用法完全不同。以下是它们的详细区别:


1. sizeof

  • 作用sizeof 是一个编译时操作符,用于计算数据类型或变量所占用的内存大小(以字节为单位)。
  • 适用范围
    • 基本数据类型(如 intdouble 等)。
    • 数组。
    • 结构体或类。
    • 指针。
  • 特点
    • 在编译时计算,结果是一个常量。
    • 对于数组,返回整个数组的大小。
    • 对于指针,返回指针本身的大小(通常是 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 的区别

特性sizeofstrlen
类型编译时操作符运行时函数
作用计算数据类型或变量占用的内存大小(字节)计算 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
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容