===《C/C++笔记》===sizeof

8 篇文章 0 订阅

《1》sizeof与strlen的区别

1.sizeof 操作符的结果类型是size_t(头文件中定义为unsigned int)。

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

3.sizeof 可以用类型做参数,也可以用函数做参数;strlen 只能用char * 做参数,且必须以 “\0” 结尾的。

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

5.大部分编译程序在编译的时候就把sizeof 计算过了,是类型或是变量的长度,这就是sizeof(x) 可以用来定义数组维数的原因:

char str[20]="0123456789";

int a=strlen(str);//a=10;

int b=sizeof(str);//b=20;

6.strlen 的结果要在运行的时候才能计算出来,用来计算字符串的长度,而不是类型占内存的大小。

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

8.当使用了一个结构类型或变量时,sizeof 返回实际的大小。当使用一静态的空间数组时,sizeof返回 全部数组的尺寸;sizeof 操作符不能返回被动态分配的数组或外部的数组的尺寸。

9.数组作为参数传递给函数时传的是指针而不是数组,传递的是数组的首地址;fun(char [8])、fun(char [])都等价于 fun(char *)。在c++中传递数组永远是传递指向数组首元素的指针、编译器不知道数组的大小。

10.sizeof 操作符不能用于函数类型、不完全类型或位字段。不完全类型是指具有未知存储大小数据的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。


《2》 sizeof 的适用场合

1.sizeof操作符的一个主要用途是与存储分配和I/o系统那样的例程进行通信:

void  *malloc(size_t size);

size_t freed(void *ptr, size_t size,size_t nmemb,FILE *stream);

2.可以查看某种类型对象在内存中所占的单元字节:

void *memset(void *s,int c,sizeof(s));

3.在动态分配一对象时,可以让系统知道要分配多少内存。

4.便于一些类型的扩充。在windwos中有很多结构类型就有一个专用字段用来存放该类型字节大小。

5.由于操作数的字节数在实现时可能出现变化,建议在设计操作数字节大小时用sizeof代替常量计算。

6.如果操作数是函数中的数组形参或函数类型的形参,sizeof 给出其指针的大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值