memset 、ZeroMemory和 “={0}” 三者区别
2016-04-05 18:13
309 查看
当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想要的值,比如
char data[10]; memset(data, 1, sizeof(data)); // right memset(data, 0, sizeof(data)); // right
而在初始化其他基础类型时,则需要注意,比如,
int data[10]; memset(data, 0, sizeof(data)); // right memset(data, -1, sizeof(data)); // right memset(data, 1, sizeof(data)); // wrong, data[x] would be 0x0101 instead of 1
以上内容引用自:http://blog.csdn.net/my_business/article/details/40537653#
ZeroMemory、memset 和
“={0}” 三者区别:
首先是ZeroMemory和memset的区别:1、ZeroMemory是微软的SDK提供的,memset属于C
Run-time Library提供的。
因此ZeroMemory只能用于Windows系统,而memset还可用于其他系统。
2、ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部其实是用
memset实现的,而memset除了对内存进行清零操作,还可以将内存置成别的字符。
3、如果程序是Win32程序而且不想连接c运行时库,那就用ZeroMemory,如果需要跨平台,那就用memset。
所以如果ZeroMemory和memset用于清零操作,其本质是一样的。
然后说说ZeroMemory和
“={0}”的区别:
1、ZeroMemory会将结构中所有字节置0,而“={0}”只会将成员置0,其中填充字节不变。
2、一个struct有构造函数或虚函数时,ZeroMemory可以编译通过,而“={0}”会产生编译错误。其中,“={0}”的编译错误起到了一定的保护作用,
因为对一个有虚函数的对象使用ZeroMemory时,会将其虚函数的指针置0,这是非常危险的(调用虚函数时,空指针很可能引起程序崩溃)。
相关文章推荐
- Python描述符(descriptor)解密
- android中事件传递机制(2)
- 前端必会
- Python~切片Slice
- 纵表与横表互转实例(转)
- python version 2.7 required,which was not found in the registry
- TextruePacker
- app 多图片分享至微信朋友圈
- poj 2506 递推+Java大数
- mybatis not binding
- 各个JSON技术的比较
- Spark基本概念
- iOS 隐藏导航栏UINavigationBar底部黑线
- http://blog.csdn.net/emoven/article/details/12999265
- 华为USG防火墙双机热备(业务口工作在三层上下行连接路由器)
- yum install nginx
- Mysql入门第四课 视图和存储程序
- 近世代数第一章总结
- Go语言核心之美 4.1-函数声明
- 【必学】HashMap的原理