C++ sizeof和strlen的区别


 

1.sizeof:(摘自百度)

 sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
    具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
    数组——编译时分配的数组空间大小;
    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
    类型——该类型所占的空间大小;
    对象——对象的实际占用空间大小;
    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

2.strlen:(摘自百度)

strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
    它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符'\0'。返回的长度大小不包括'\0'。

 

区别例子一:

void Solution(char *str)
{
	cout << sizeof(str) << endl;
	cout << strlen(str) << endl;
}

int main()
{
	char str[6] = {'1','2','3','4','5','\0'};
	cout << sizeof(str) << endl;
	cout << strlen(str) << endl;
	Solution(str);
	getchar();
	return 0;
}

输出结果:

 

区别例子二:

void Solution(char *str)
{
	cout << sizeof(str) << endl;
	cout << strlen(str) << endl;
}

int main()
{
	char *str;
	for(int i = 0; i < 5; i++)
	{
		*(str + i) = i + 1;
	}
	*(str + 5) = '\0';
	cout << sizeof(str) << endl;
	cout << strlen(str) << endl;
	Solution(str);
	getchar();
	return 0;
}

输出结果:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM