C++的memset()的常规使用

几个链接:http://blog.csdn.net/lyj2014211626/article/details/65481630

http://blog.csdn.net/lyj2014211626/article/details/65481630

http://blog.csdn.net/my_business/article/details/40537653

以前写的代码都用到了memset,今天才知道memset的正确用法

memset()函数原型是extern void *memset(void *buffer, int c, int count)

memset的正规使用时用来初始化char类型的数组,也就是说它只接受0x00到0xFF的值,也就是c的范围

c的范围必须是ASCLL码值

初学者都会有一种疑惑,为什么有了memset这个函数为什么还需要for循环对int数组进行赋值呢,但其实这个函数的作用是将数组以单个字节拷贝的方式放到指定的内存中去

举个例子

这样你可能以为如果你赋值1的话会让整个dp数组里的每一个int变成1,其实不然。

1. memset是以字节为单位,初始化内存块。
当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想要的值,比如,
[cpp]  view plain  copy
  1. char data[10];  
  2. memset(data, 1, sizeof(data));    // right  
  3. memset(data, 0, sizeof(data));    // right  
而在初始化其他基础类型时,则需要注意,比如,
[cpp]  view plain  copy
  1. int data[10];  
  2. memset(data, 0, sizeof(data));    // right  
  3. memset(data, -1, sizeof(data));    // right  
  4. memset(data, 1, sizeof(data));    // wrong, data[x] would be 0x0101 instead of 1  

[cpp]  view plain  copy
  1. memset(dp,1,sizeof(dp));    

以上代码执行后,dp数组的内容为 00000001 00000001 00000001 00000001 转化为十进制后不为1

我们在很多程序中都会看到memset(a,127,sizeof(a));这样的代码,127是什么特别的数字呢?通过基础的进制转换可以得知127的二进制表示是01111111,那么在dp数组里放的内容就是“01111111 01111111 01111111 01111111”,(10进制的2139062143),这样就实现了将数组里的全部元素初始化为一个很大的数的目的了,在最短路径问题以及其他很多算法中都是需要用到的。值得注意的是,int类型的范围为2^31-1,大约是2147483647的样子(如果我没有记错的话),所以初始化int类型的数组也可以使用127这个数值。



如果是128呢?因为128的二进制是10000000,那么放的内容就是10000000 10000000 10000000 10000000,经过计算可得这个数是-2139062144。这样就可以将数组初始化为一个很小的数了。









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值