memset()函数详解
来源:互联网 发布:arm linux gnu gcc 编辑:程序博客网 时间:2024/06/05 09:22
memset()函数最近总是用到,用来初始化数组的,以字节为单位,
包含于 #include<string.h> 头文件里,
声明是 memset (void*, int, size_t);
这样不直观,举例吧,比如你现在有 data[1000];这样的一个数组, 你把这个数组全部置0呢,就可以这样写
memset(data,0,sizeof(data));
第一个参数是数组名,第二个是把每个字节赋值多少,0就是每个字节置0 ,1就是置1 第三个就是数组大小啦,用sizeof(data)稳妥点,你要是用 data_length*sizeof(int) 也行,这个长度可以自己视情况而定
当然,这样的确很方便,但是最近却发现memset()的一个问题,
对于结构体,int, double, long long 都可以全部置0 但是如果你写下面这样的代码
memset(data,1,sizeof(data));for(i=0;i<10;i++){printf("%d ",data[i]);}
你就可以发现问题了,输出的结果是
明明是赋值为1 为什么会变成 16843009 呢,
实际上是因为 memset 是为字符串而准备的函数,它是将每个字节置为1
如果是char a[1000] 没问题,但是int data [] 就 出现问题了,因为每个int 是4个字节
每个字节置0 则每个数就是 00000001 00000001 00000001 00000001
这个值就是 2^24 + 2^ 16 + 2^8 + 1 = 16843009
所以如果数组不是一个字节的话,memset() 更多的是用来 置0 和 -1 ,-1 是全部都是1 一个字节和4个字节也一样的,当然,如果是其他值的话用memset初始化则会不准确,
0 0
- memset函数详解
- memset函数详解
- memset函数详解
- memset函数详解说明
- memset 函数详解
- memset函数使用详解
- memset函数使用详解
- Memset 函数详解
- memset函数使用详解
- memset函数使用详解
- memset函数使用详解
- memset函数使用详解
- memset()函数 详解
- Memset 函数详解
- memset()函数详解
- memset函数使用详解
- memset函数使用详解
- memset函数使用详解
- HDU4336-Card Collector(概率DP求期望)
- [leetcode]Multiply Strings
- Excel 已经检测到"xxx.xsl"是SYLK文件,但是不能将其加载解决方法
- JVM资料汇总
- H264实时编码及NALU,RTP传输(续)
- memset()函数详解
- CSS执行顺序与优先权
- 带模板的顺序循环队列
- 分布式缓存memcached原理
- 网站性能优化 - 数据库及服务器架构篇
- 2.4.0版 hadoop伪分布式模式在mac上的配置和运行
- Linux查看系统信息的一些命令及查看已安装软件包的命令
- pkg-config详解
- 黑马程序员-Object C之copy和mutableCopy语法(二)