关于函数memset的若干用法和注意事项
2016-05-11 22:24
447 查看
#include<memory.h>或<string.h> //在一些编译器中可不添加头文件,视具体情况而定 void* memset(void *s, int ch, size_t n);
memset将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。
它是对较大的结构体或数组进行清零操作的一种最快方法。
不能对非单字节的数组进行赋值,除非是赋0值,比如:
int array[16]; memset(array, 1, sizeof(int) * 16); //error, sizeof(int)为4 memset(array, 0, sizeof(int) * 16); //ok
事实上,第一种操作会使得数组的每个元素都变为(00000001 00000001 00000001 00000001) = 16843009,但第二种操作是没有问题的,因为把每个字节赋为0后,其值也是0。因此,下面的操作没有任何问题:
char ch[16]; bool bl[16]; memset(ch, 'A', sizeof(char) * 16); memset(bl, true, sizeof(bool) * 16);
甚至可以对只含有单字节的结构体赋值:
struct strc { bool bl; char ch; }; strc array[16]; memset(array, 1, sizeof(strc) * 16);
因此,memset用于对任意数组进行初使化(仅限赋0),以及对只含单字节元素的数组进行赋值。
相关文章推荐
- CSS应用:阴影和轮廓
- 第一篇博客
- CSS选择器总结
- 【160326 18:00】最大子序列之和 1
- iOS Cocoapods安装
- 自定义导航按钮UIBarButtonItem
- hdu——1062Text Reverse(反转函数reverse)
- 先验概率、后验概率以及共轭先验
- jdbc的简单实现demo
- Problem N
- opengl 颜色版
- leetcode算法训练#2 Add Two Numbers
- C#之正则表达式
- 01背包问题
- @Validate SpringMVC 使用JSR-303进行校验
- GNU C 、ANSI C、标准C、标准c++区别和联系
- STM32_EXIT中断
- 位图排序基本实现
- Java反射总结(一)
- jQuery的XX如何实现?——3.data与cache机制