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

  • 相关阅读:
    【转】 springBoot(5)---单元测试,全局异常
    【转】 springBoot(4)---热部署,配置文件使用
    【转】 springBoot(3)---目录结构,文件上传
    【转】 springBoot(2)---快速创建项目,初解jackson
    【转】 springBoot(1)---springboot初步理解
    【转】 SpringBoot+MyBatis+MySQL读写分离
    简单请求 vs 非简单请求
    H5新增的API
    图片
    vue更新dom的diff算法
  • 原文地址:https://www.cnblogs.com/ruingking/p/13342105.html
Copyright © 2011-2022 走看看