zoukankan      html  css  js  c++  java
  • 发现C++的sizeof关键字的奇怪问题

    在调试程序的时候发一个关于关键字sizeof的令我感到困惑的问题

    看下面的例子:

    int a[5]

    所有人都明白这里定义了一个数组,其包含了5 个int 型的数据。我们可以用a[0],a[1]等来访问数组里面的每一个元素。

    当我们定义一个数组a 时,编译器根据指定的元素个数和元素的类型分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a。名字a 一旦
    与这块内存匹配就不能被改变。a[0],a[1]等为a 的元素,但并非元素的名字。数组的每一个元素都是没有名字的。那现在再来看看sizeof 关键字时的几个问题:
    sizeof(a)的值为sizeof(int)*5,32 位系统下为20。
    sizeof(a[0])的值为sizeof(int),32 位系统下为4。
    sizeof(a[5])的值在32 位系统下为4,此处并不会出错。关键字sizeof 求值是在编译的时候。虽然并不存在a[5]这个元素,但是这里也并没有去真正访问a[5],而是仅仅根据数组元素的类型来确定其值。所以这里使用a[5]并不会出错。

    sizeof(a)取5个元素的大小,在32位系统下为20,这个好理解,所有元素的sizeof值

    sizeof(&a[0])的值在32位系统下是4,这个也好理解,首元素a[0]的首地址.

    但是sizeof(&a) 在32位系统下VC++6.0的结果为20,这个令我非常难以理解,&a不是数组a的首地址么?&a既然是取a 的首址那不是应该为4才对吗?如果我的观点是正确的,那么是不是编译器出错了?如果我的观点的是错误的,那么&a就不是取首地址了?非常矛盾!

    希望高人指点。

  • 相关阅读:
    codevs1044 拦截导弹(最长不下降子序列dp)
    codevs1014 装箱问题(DP)
    codevs1068 乌龟棋(DP)
    angular.extend vs angular.copy
    angular input框点击别处 变成不可输入状态
    angular select框 option空行
    angular ui 路由传参
    setTimeout 传参
    设置请求头信息的不同方式
    vertical-align
  • 原文地址:https://www.cnblogs.com/cgli/p/1891290.html
Copyright © 2011-2022 走看看