关于memset的使用

摘要:
今天,我了解了memset的用法。当然,我还是在网上找到了信息。有个博客说得很好http://www.xuebuyuan.com/1442940.html让我总结一下我今天学到的要点。1.memset的赋值原则:void*memset(*s,c,size_tn);其中s是要分配的第一个地址,c是要分配n位长度,memset以字节为单位分配,因此inta[100];内存集(a,-1,sizeo

今天学了一下有关memset的使用

当然还是从网上找的资料

有一篇博客讲的挺好的

http://www.xuebuyuan.com/1442940.html

我总结一下今天学到的几点

1、关于memset的赋值原理

void *memset(*s,   c, size_t n); 

其中s为要开始赋值的首地址   c 位要赋值成的   n位长度

memset是以字节作为单位进行赋值的  

所以int a[100]; memset(a, -1, sizeof(a))   memset(a, 0, sizeof(a))为合法的

而相应的memset(a, 1, sizeof(a)) 为不合法的   

原因在于  对于一个整形数据  其占用四个字节    对于-1一个字节为11111111  所以四个字节为11111111 11111111 11111111 11111111  其值仍然为-1

对于0 亦是如此

而对于1   其一个字节0000001  四个字节 为0000001 0000001 0000001 0000001  该值不为1所以赋完值之后就会成为改数而不是1

所以对于int型的赋值要考虑四个字节的最大值

我的第一反应时0x7f然后试了一下 果然是够大  但是   我又在那篇文章最后看到了他的缺点  

太大了

如果一个数加进来很容易就会炸了  就会成一个负数  

然后作者又提供了一种很好的赋值叫0x3f  10^9多   正好够用

然后一个字符占一个字节 所以  对于字符型的数组 memset可以在ASCII之内随便赋值

对于bool型的数组  其也是占用一个字节 随便赋值

免责声明:文章转载自《关于memset的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CAD启动找不到AC1ST16.DLLMySQL 5.7 MHA(mha4mysql-manager依赖包)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

memset函数使用

函数原型 void *memset(void *s,int c,size_t n); 功能 将已开辟内存空间 s 的首 n 个字节的值设为值 c。 头文件  #include<memory.h>  1. memset是以字节为单位,初始化内存块。 当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想要的值,比如, c...

使用memset()要注意

原型如下: ptr是要写入的内存块的指针,value是要写入的值,num是从ptr指向的首地址开始一共要写入的字节数。 要注意num传入的参数 错误示范:    实际上sizeof(InDegree)是4,等于sizeof(int)。也就是说这里的num参数只是一个指针的大小,没有完成初始化工作,除了第一个数组元素外,剩下的都是随机值。 应该改成:...

关于memset的几个易错点

memset(void *s,int ch,size_t n); 作用:将s中当前位置后面的n个字节用 ch 替换并返回 s  注意这里是“字节”而非单位长度,memset不会考虑各个类型的单位长度,只是处理字节。所以使用的时候应该用如下的格式: memset(a,b,n*sizeof(int));//这里以Int为例。 -----------------...

数据结构基础之memset---有memset 抛出的int 和 char 之间的转换和字节对齐

今天晚上,在做滤波算法时,里面用到很多float 和int 以及char 之间的类型强制转换,后面滤波完发现图片有些区域块,有过度曝光的白光,我就跟踪,以为是char 字符数字数据溢出问题,加了0-255的判断,然后打印,发现强制转换后的int类型数据多处出现负数,很奇怪,后面写了个测试程序,慢慢的问题出来了 : #include <stdio.h&...

CPP常用库函数以及STL

其他操作 memset void * memset ( void * ptr, int value, size_t num ); memset(ptr,0xff,sizeof(ptr)); 使用memset初始化vector vector<int> vec(10,1); memset(vec.data(),0,vec.size()*sizeo...

c++对象初始化中 ZeroMemory、memset、直接赋0的区别

首先是ZeroMemory和memset的区别: 1、ZeroMemory是微软的SDK提供的,memset属于C Run-time Library提供的。因此ZeroMemory只能用于Windows系统,而memset还可用于其他系统。 2、ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部其实是用 memset实现的,而memset除...