zoukankan      html  css  js  c++  java
  • memset 、ZeroMemory和 “={0}” 三者区别

    memset是以字节为单位,初始化内存块。
    当初始化一个字节单位的数组时,可以用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,这是非常危险的(调用虚函数时,空指针很可能引起程序崩溃)。


    ————————————————
    版权声明:本文为CSDN博主「蓝旭晨枫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/ouyangjinbin/java/article/details/51066820

  • 相关阅读:
    ADSL自动更换IP的方法
    css框架 一个可控性强的css+xhtml页面布局生成器。
    Linux环境配置之LAMP搭建(源码安装)
    PHP小技巧
    Google首页电吉他源代码下载
    Jquery 插件可以用来操作定界窗,将在定界窗内选取的项目放到父窗口内
    今天見鬼了
    今天闲着没事去公园玩了一下,随手拍了几张
    PHP利用PHPMailer组件的Gmail发信能力发送电子邮件
    端午节放假去台湾中部山区野餐时照的
  • 原文地址:https://www.cnblogs.com/ruingking/p/13342105.html
Copyright © 2011-2022 走看看