功能区别:sizeof用来求所占内存大小,而strlen用来求字符串长度。
区别:
(1)sizeof是一个操作符,它的结果类型为size_t(无符号整型数据),而strlen是一个函数,其结果类型也是size_t;
(2)sizeof的参数可以是变量,也可以是类型,为变量的时候可以不加括号(sizeof a);而strlen的参数只能是变量;
例如,
int a = 3;
sizeof(a) = 4;
sizeof(int) = 4;
char *p = "hello 123!";
strlen(p) = 10
(3)在大不部分的编译器下,编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来;
例如,
int a = 10;
printf( "%d", sizeof(a++));//在编译的时候,a++就被替换成了a所占空间大小4
printf("%d", a);
结果为:4,10
(4)数组做sizeof的参数不退化,传递给strlen就会退化成指针。
在C++中,传递数组永远都是传递指向数组首地址元素的指针,编译器不知道数组的大小。如果想在函数内知道数组的大小,需要用一个len作为形参传入。
例如,
char str[10] = "abcd";
strlen(str) = 4;
sizeof(str) = 10;
而char *p = "1234567890";
strlen(p) = 10;
(5)计算结构变量的大小就必须讨论数据对齐的问题。
(6)sizeof操作符不能用于函数类型、不完全类型或位字段。不完全类型指的是位置存储大小数据的数据类型,如动态数组、void等。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文链接: https://www.cnblogs.com/wangicter/archive/2012/08/24/4767322.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/60771
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!