技术员博客      html  css  js  c++  java
  • 关于sizeof运算符的一些理解

    作者:朱金灿
    来源:http://blog.csdn.net/clever101

    CSDN上有网友提问:

    这段代码运行结果为4,4,16,4。
    问(1)为什么pArray_No1初始化为指向10个int型的内存地址块(我的理解没错吧?)
    而sizeof的运算结果只是1个int型的字节大小,按理来说应该是10个啊,为什么呢?
    问(2)pArray_No2=a;说明pArray_No2指向了数组a首元素的地址,sizeof(pArray_No2)
    =4,我理解为编译器只计算了数组a首元素地址的内存空间大小;但是问题出来了,a
    代表的肯定是数组a首元素的地址,但是这里sizeof(a)=16,说明编译器计算的不是
    一个首元素,而是整个数组4个元素的地址占的内存空间。我迷惑了,pArray_No2与
    a代表的意义相同,但是为什么sizeof的结果却截然不同呢?


    MSDN上的解释为:
    The sizeof keyword gives the amount of storage, in bytes, associated with a
    variable or a type (including aggregate types).
    This keyword returns a value of type size_t.
    其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一
    般定义为
    typedef unsigned int size_t;

    我觉得理解sizeof运算符的关键在于理解编译期和运行期的区别。静态的数组的大小在编译期就决定了,所以sizeof获取的是数组的大小,而指针动态开辟内存,sizeof不能获取它的开辟的内存的大小,它只能获取指针在该编译器的编译期的大小,在win32平台上无论什么指针的大小都是4个字节。你可以通过编译下面两段代码进行比较分析:

    (1)

    (2)

  • 相关阅读:
    [置顶] iPhone 5S及iWatch或将采用指纹验证技术
    使用控制台程序测试DLL依赖
    项目实现多数据库支持 规格严格
    e企业管理解决方案业务数据字段任意设置
    不错的网址 规格严格
    Thrift 学习笔记1——Ubuntu环境下Thrift的安装、编译以及测试 张进の专栏 博客频道 CSDN.NET
    Visual Studio 2008 中程序路径配置 .
    install python262 写得不错
    NetBeans 时事通讯(刊号 # 23 Aug 26, 2008)
    成为跨平台的C++程序员 C++ language ITeye论坛
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6471135.html
Copyright © 2011-2022 技术员博客