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

  • 相关阅读:
    综合实例-文本框类部件
    输入掩码
    WebP,Jpeg,Png格式图片的编解码区别
    美团点评提前批面经
    Android中AIDL的使用详解,如何发起回调?
    JNI在Android中的实践NDK:Hello World
    Timer实现原理
    百度秋招凉经:客户端测开
    阿里秋招面经:Android客户端开发工程师
    Picasso和Glide区别
  • 原文地址:https://www.cnblogs.com/ruingking/p/13342105.html
Copyright © 2011-2022 走看看