解释C++ sizeof 和 strlen 的区别?
参考答案:
sizeof
和strlen
是C++中常用的两个运算符/函数,它们都用于测量某种类型或对象的大小,但它们的用途和上下文有所不同。
-
sizeof:
sizeof
是一个运算符,不是函数。- 它用于确定数据类型或对象在内存中占用的字节数。
sizeof
在编译时确定大小,因此它返回的是类型或对象的大小,而不是实际分配的内存量。sizeof
可以用于任何数据类型,包括基本数据类型(如int, float, char等)、结构体、类、数组等。- 对于数组,
sizeof
返回整个数组的大小(以字节为单位),而不仅仅是数组的第一个元素的大小。 sizeof
不会考虑动态分配的内存大小。例如,如果你有一个指向动态分配的数组的指针,sizeof
这个指针只会返回指针本身的大小,而不是数组的大小。
-
strlen:
strlen
是一个函数,定义在cstring
或string.h
头文件中。- 它用于确定C风格的字符串(即以空字符'\0'结尾的字符数组)的长度,不包括终止的空字符。
strlen
在运行时确定字符串的长度,因为它需要遍历字符串直到遇到空字符。strlen
只能用于C风格的字符串,不能用于其他类型的数据。- 如果尝试对未初始化的字符串或未以空字符结尾的字符数组使用
strlen
,可能会导致未定义的行为。
示例:
#include <iostream>
#include <cstring>
int main() {
char str[] = "Hello, World!";
int arr[10];
std::cout << "Size of str (C-style string): " << strlen(str) << " bytes\n";
std::cout << "Size of arr (integer array): " << sizeof(arr) << " bytes\n";
std::cout << "Size of int: " << sizeof(int) << " bytes\n";
return 0;
}
在这个示例中,strlen(str)
会返回13,因为字符串"Hello, World!"有13个字符(不包括结尾的空字符)。sizeof(arr)
会返回40(假设int的大小为4字节),因为数组有10个int元素。sizeof(int)
会返回int类型在特定平台/编译器上的大小,通常是4字节。