sizeof与strlen的区别

功能区别: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等。

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2012-08-24 14:40  wangicter的博客  阅读(259)  评论(0编辑  收藏  举报