首页 > 编程知识 正文

size和sizeof,sizeof结果是什么类型

时间:2023-05-06 09:51:04 阅读:155796 作者:1350

首先,通过一些例子说明sizeof和strlen的区别

第一个例子: char* ss='0123456789 '; sizeof(ss )的结果是4,ss是指向字符串常数的字符指针。 //要求的是指针的大小

sizeof(ss )的结果为1,) ss是第一个字符。

第二个例子: char ss[]='0123456789 '; sizeof(ss )的结果为11,ss是数组,计算到“”的位置,因此为(10 ) 1。

sizeof(ss )的结果为1,) ss是第一个字符。

第三个例子: char ss[100]='0123456789 '; sizeof(ss )的结果为100,ss表示预分配给内存的大小100*1

strlen(ss )的结果为10,其内部实现循环计算字符串的长度直到“”。

第四个示例: int ss[100]='0123456789 '; sizeof(ss )的结果为400,ss表示预分配给内存的大小100*4

字符串(ss )错误。 strlen的参数只能是char*,并且必须以“”结尾。

第五个例子: class X{ int i; int j; char k; (; x; coutsizeof(x ) endl; //结果为12,表示内存完成coutsizeof(x ) endl; //结果为12,内存补丁是通过深入了解sizeof和strlen,两者的区别如下。

(1) sizeof操作符的结果类型为size_t,头文件的typedef为unsigned int类型。 此类型保证可以容纳实现已建立的最大对象的字节大小。

)2) sizeof是运算符,strlen是函数。

)3) sizeof可以用模做参数,strlen只能用char*做参数,必须以“”结尾。 sizeof也可以将函数作为参数。 例如,以下内容:

短f (; printf(%d(n,sizeof(f ) f ) ) ); 输出的结果是,sizeof(short )即2.)数组不会使sizeof的参数恶化,传递给strlen时会恶化为指针。

)5)大多数编译器在编译时计算了sizeof。 类型或变量的长度。 这就是sizeof(x )可用于定义数组维的原因。

) strlen的结果在运行时计算,用于计算字符串的长度,而不是类型占用内存的大小。

)7)在sizeof之后,如果是类型,则必须加括号,但如果是变量名,则可以不加括号。 这是因为sizeof是操作符而不是函数。

)8)使用一个结构类型或变量时,sizeof返回实际大小。 如果使用静态空间数组,则sizeof返回所有数组的大小。 sizeof操作符不能返回动态分配的数组或外部数组的大小。

)数组作为参数传递给函数时,传递的不是数组而是指针,fun(char(8)、fun(char(8 ) )等数组的起始地址与fun(char(8 )等价。 用c传递数组总是指向数组开头元素的指针,编译器不知道数组的大小。 如果您想知道函数中数组的大小,则必须先进入函数,然后在memcpy中复制数组,并使用其他参数传递长度。 代码如下所示。

unsigedchar * P1,int len ) unsigned char * buf=newunsignedchar (len=1); memcpy(buf,p1,len ); (10 ) sizeof操作符不能用于函数类型、不完整类型或位字段。 不完整类型是具有未知存储大小数据的数据类型,如未知存储大小的数组类型、未知内容的结构或绑定类型、void类型等

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。