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

  • 相关阅读:
    HTML 特殊符号编码对照表
    C#删除字符串最后一个字符的几种方法
    c# 获取相对路径
    垂直滚动条代码
    Android微信分享功能实例+demo
    android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用
    Android Camera 使用小结
    onSaveInstanceState和onRestoreInstanceState
    Android中的PopupWindow详解
    Unable to execute dex: java.nio.BufferOverflowException.解决办法
  • 原文地址:https://www.cnblogs.com/ruingking/p/13342105.html
Copyright © 2011-2022 走看看