博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于sizeof运算符的一些理解
阅读量:2429 次
发布时间:2019-05-10

本文共 1164 字,大约阅读时间需要 3 分钟。

作者:朱金灿

来源: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)

 

你可能感兴趣的文章
华为、BAT力捧!程序员:我彻底慌了...
查看>>
刷爆了!BAT这场AI芯片之战,你更支持谁?
查看>>
定了!刚面完AI岗位,这些题全都考了!程序员:有黑幕!
查看>>
阿里云部署Django项目(nginx+uWSGI)
查看>>
程序员必看,这本深度学习宝典刷爆IT圈!
查看>>
python学习心得体会(一)
查看>>
程序员薅羊毛神器来了!
查看>>
自学 Python后,自己一个人可以通过此技能挣什么钱?
查看>>
Java三种面试者是面试官最讨厌的,见之即毙!
查看>>
当程序员要具备什么条件?
查看>>
手拿3份AI的offer?这些人凭什么这么刚?
查看>>
给大家推荐一本Python书,京东断货王,火遍IT圈!
查看>>
Python小白说:“看完这篇文章才知道这样学习最高效”
查看>>
CSDN社群十问十答(Python第一期)
查看>>
CSDN社群十问十答(Java第一期)
查看>>
CSDN社群十问十答(区块链第一期)
查看>>
这届AI程序员厉害了,还没出校门就被预定?
查看>>
良心帖!看完这篇,你的Python入门基础就差不多了!
查看>>
人工智能还会火多久?
查看>>
安装pygame和pip的问题以及过程
查看>>