memset解密

C语言中的memset

说来惭愧,C语言学了一学期了,但直到今天刷leetcode时魔改半天发现是memset这里的问题时,经查询才真正明白memset的用法。

头文件

string.h

用法

void *memset(void *s, int ch, unsigned n);

功能

以前使用memset时,第三个参数总是写成sizeof(int)*n之类的,所以想当然的把memset的功能理解为,将n个int类型数据赋值为ch。(现在想来错的确实很离谱,因为参数传递进去就是对应内存的字节数了)但实际结果如下:

int arr[5];
memset(arr, 1, sizeof(int)*5);
>>> 16843009 16843009 16843009 16843009 16843009 

这是因为memset是将unsigned n中的每个字节赋予ch值,当然这也说明ch的数值范围也只能在一个字节内。由于arr中每个数据均为int类型,占据4个字节,所以表现出来的数值为(1<<8*3+1<<8*2+1<<8*1+1=)16843009,刚好就是上述的输出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值