您的位置:首页 > 其它

sizeof 和 strlen 的区别

2012-09-20 08:20 357 查看
一、解说

1、sizeof是运算符,strlen是函数

2、sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int 类型。该类型能保证足够容纳所建立的大对象的字节大小

3、sizeof可以用类型作参数,strlen只能用char *做参数,且必须是以‘\0’结尾,此外sizeof还可以用函数来做参数 short f(); printf("%d", sizeof(f()));//结果为sizeof(short)=2

4、数组做sizeof的参数不退化,传递给strlen就退化为指针

char str[100]="123";

sizeof(str)=100; sizeof(str)=3;

5、strlen函数的计算结果在运行的时候才能计算出来,用来计算字符串长度,而sizeof操作符计算的是类型占内存的大小。

7、sizeof后如果是类型要加括号,如果是变量可以不用加括号。因为sizeof是个操作符而不是函数的原因。

8、数组作为参数传递给函数时的是指针而不是数组,传递的是数组的首地址,如fun(char a[8])、fun(char a[])都等价于fun(char *a), sizeof(a)=4

9、sizeof计算结构变量或类的大小时要注意考虑数据对齐的问题,C++在处理数据时经常把结构变量中的成员大小按照4或8的倍数计算,这就叫数据对齐,data alignment

二、示例

1.常规

char str1[] = “Hello” ;

char str2[5] = {'H','e','l','l','o'};

char str3[6] = {'H','e','l','l','o','\0'};

char *p1 = "Hello";

char *p2[]={"hello","world"};

int n = 10;

int *q = &n;

sizeof (str1 ) = 6 (自动加了'\0')

strlen (str1 ) = 5 (字符串的长度) //不把'\0'计算在内

sizeof (str2 ) = 5 (字符数组的大小)

strlen (str2) = 未知 (该字符串缺少结束符'\0')

sizeof (str3) = 6 (字符数组的大小)

strlen (str3) = 5 (该字符串的长度为5)

sizeof ( p1 ) = 4 (p1是一个指针,大小为4)

sizeof ( p2 ) = 8 (p2是长度为2的字符串数组)

sizeof ( n ) = 4 (整型大小为4)

sizeof ( q ) = 4 (q是一个指针,大小为4)

2.动态分配内存

int *p = (int *)malloc( 100 );

sizeof ( p ) = 4 (p是一个指针,大小为4)

3.函数参数

void Function1( char p[],int num ){

sizeof ( p ) = 4 (数组在做为函数参数时均化为指针)

}

void Function2( int p[],int num ){

sizeof ( p ) = 4 (数组在做为函数参数时均化为指针)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: