memset()函数和sizeof关键字


数组初始化的时候常用for()循环,不过如果考虑效率的话,最好用memset(),下面简单介绍以下memset()。
函数原型:
void *memset(void *s, int ch, size_t n)
函数解释:将s中前n个字节替换为ch并返回s;
memset:它包含在<memory.h>或者<string.h>中。作用是在一段内存块中填充某个给定的值,它的操作对象为单个字节,是对较大的结构体或数组进行清零操作的一种最快方法。
提到memset()就不得不提到sizeof(),因为sizeof()使用不好可能给memset()带来很隐蔽的错误:

int some_func(struct something *a){
  …
  …
  memset(a, 0, sizeof(a));
  …
  }

上面这段代码是不能达到对a[]清零的目的的,因为some_func()函数的参数已退化为指针,而不是数组对象,因此这里的sizeof(a)在32位机器上返回的应该是4,而不是a[]数组的长度(所占字节数)。
sizeof是C/C++中的一个操作符(operator),而不是函数,其作用就是返回一个具有明确类型的对象或者类型所占的内存字节数。
它有以下特点:
1.它在程序编译时被执行
2.它的操作对象可以是某个对象,或者某种类型
3.当适用于一个变量时, sizeof 返回实际的大小,当适用于静态的空间数组, sizeof 返回全部数组的尺寸。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值