sizeof 和 strlen 是C和C++ 中用于处理数据大小和字符串长度的两个不同的操作符/函数,它们的区别如下:
概念和用途
- sizeof 是一个操作符,用于计算数据类型或变量在内存中所占的字节数,它是在编译时确定的,与数据的实际内容无关,可用于任何数据类型,包括基本数据类型(如 int 、 char 等)、数组、结构体、指针等。
- strlen 是一个函数,用于计算字符串的长度,即字符串中字符的个数,不包括字符串结束符 \0 ,它是在运行时计算的,并且只适用于以 \0 结尾的字符串。
参数类型
- sizeof 的操作数可以是数据类型名,也可以是变量名、表达式等。例如, sizeof(int) 、 sizeof(arr) ( arr 为数组)、 sizeof(ptr) ( ptr 为指针)等都是合法的。
- strlen 的参数必须是指向以 \0 结尾的字符串的指针,通常是 char* 类型。例如, strlen("hello") 、 char str[] = "world"; strlen(str); 都是正确的用法。
返回值含义
- sizeof 返回的是数据类型或变量在内存中所占的字节数。例如,在32位系统中, sizeof(int) 通常返回4, sizeof(char) 返回1, sizeof(char*) 返回4(指针大小为4字节)。如果是数组, sizeof 返回整个数组的大小,如 char arr[10]; sizeof(arr) 将返回10。
- strlen 返回的是字符串中字符的个数(不包括 \0 )。例如, strlen("hello") 返回5, char str[] = "world"; strlen(str) 也返回5。
下面是一个简单的代码示例来演示它们的区别:
cpp
#include <iostream>
#include <cstring>
int main() {
int num = 10;
char str[] = "Hello";
char* ptr = str;
std::cout << "sizeof(num): " << sizeof(num) << std::endl; // 输出4,int类型在32位系统中占4字节
std::cout << "strlen(str): " << strlen(str) << std::endl; // 输出5,字符串"Hello"的长度为5
std::cout << "sizeof(str): " << sizeof(str) << std::endl; // 输出6,包括字符串结束符'\0'共6字节
std::cout << "sizeof(ptr): " << sizeof(ptr) << std::endl; // 输出4,指针在32位系统中占4字节
std::cout << "strlen(ptr): " << strlen(ptr) << std::endl; // 输出5,通过指针访问字符串,计算长度为5
return 0;
}