sizeof 和 strlen 的区别

来源:互联网 发布:联通网络用什么加速器 编辑:程序博客网 时间:2024/05/16 08:40

一、解说

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  (数组在做为函数参数时均化为指针)
}

 


  

原创粉丝点击