欢迎来到天天文库
浏览记录
ID:37896000
大小:47.50 KB
页数:8页
时间:2019-06-02
《Sizeof与Strlen的区别与联系》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Sizeof与Strlen的区别与联系1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型。该类型保证能容纳实现所建立的最大对象的字节大小。2.sizeof是运算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'' ''结尾的。sizeof还可以用函数做参数,比如:shortf();printf("%d",sizeof(f()));输出的结果是sizeof(short),即2。4.数组做sizeof
2、的参数不退化,传递给strlen就退化为指针了。5.大部分编译程序在编译的时候就把sizeof计算过了,看它是类型或是变量的长度,这就是sizeof(x)可以用来定义数组维数的原因。charstr[20]="0123456789";inta=strlen(str);//a=10;intb=sizeof(str);//而b=20;6.strlen的结果要在运行的时候才能计算出来,主要用来计算字符串的长度,不是类型占内存的大小。7.sizeof后如果接类型参数必须加括弧,如果是变量名可以不加括弧。这是因为size
3、of是个操作符不是个函数。8.当适用了于一个结构类型时或变量,sizeof返回实际的大小,当适用一静态地址空间数组,sizeof归还全部数组的尺寸。sizeof操作符不能返回动态地被分派了的数组或外部的数组的尺寸。9.数组作为参数传给函数时,传递的是指针而不是数组,传递的是数组的首地址,如:fun(char[8])fun(char[])都等价于fun(char*)在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小。如果想在函数内知道数组的大小,需要这样做:进入函数后用memcpy拷
4、贝出来,长度由另一个形参传进去fun(unsigedchar*p1,intlen){unsignedchar*buf=newunsignedchar[len+1]memcpy(buf,p1,len);}我们能常在用到sizeof和strlen的时候,通常是计算字符串数组的长度。看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:charstr[20]="0123456789";inta=strlen(str);//a=10;>>>>strlen计算字符串的长度,以结束符0x00为字符串结
5、束。intb=sizeof(str);//而b=20;>>>>sizeof计算的则是分配的数组str[20]所占的内存空间的大小,不受里面存储的内容改变。上面是对静态数组处理的结果,如果是对指针,结果就不一样了char*ss="0123456789";sizeof(ss)结果4===》ss是指向字符串常量的字符指针,sizeof获得的是一个指针的之所占的空间,应该是长整型的,所以是4。sizeof(*ss)结果1===》*ss是第一个字符其实就是获得了字符串的第一位'0'所占的内存空间,是char类型的,占了
6、1位strlen(ss)=10>>>>如果要获得这个字符串的长度,则一定要使用strlen。strlen计算长度时,计算“ ”结束符之前的字符个数,“”算一个字符。sizeof计算字符串长度时计算所有字符个数(结束符也算范围内),“ ”“”都算一个字符。一、sizeof的概念sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。其实可
7、以简单的理解sizeof是征对"类型"的。二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。2、用于变量 sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。 注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全
8、类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。 三、sizeof的结果sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型。该类型保证能容纳实现所建立的最大对象的字节大小。1、若操作数具有类型char、unsigned char或signed char,其结果等于1。因为 ANSI C正式规定字符类
此文档下载收益归作者所有