【问题标题】:When invoking the sizeof operator in the called function, what will happen? [duplicate]在被调用函数中调用 sizeof 运算符时,会发生什么? [复制]
【发布时间】:2013-02-18 06:33:40
【问题描述】:
    void testSizeof(double array[])
    {
        printf ("%i\n", sizeof(array));
    }

调用该函数时,输出的不是数组的长度。

为什么?

那么,关于输出的事实是什么?

【问题讨论】:

  • 您可以编译一个简单的示例应用程序并自己找到它......这不是火箭科学
  • 它是系统中指针的大小。也许是 32 位或 64 位...
  • 你从哪里得知sizeof 上的部分没有关于指针衰减的警告?
  • @Veger:你的建议很好,谢谢!
  • @MM.:我明白了。谢谢!

标签: c sizeof


【解决方案1】:

它返回double指针的大小,即sizeof(double*)

当函数接受double[] 类型的参数时,这与接受double* 类型的参数完全相同。据说该数组衰减为一个指针。

如需进一步说明,请参阅What is array decaying?C FAQ

如果函数需要知道数组的大小,你必须明确地传递它。例如:

void testSizeof(double array[10]) {...}

void testSizeof(double array[], size_t array_size) {...}

在第一个示例中,数组也是subject to pointer decay。但是,由于您已经知道数组的大小,因此无需使用sizeof() 来计算。

不用说,第二种方法比第一种方法灵活得多。

【讨论】:

  • 第二个没问题,但第一个...(codepad.org/5kqzjvib)。谢谢,实际上我想知道 sizeof 运算符在我的问题中定义的函数中做了什么。
  • @SimonLi:我不是这个意思。如果函数采用double[20],它已经知道数组有20 元素。它不需要sizeof()。无论如何,我已经更新了答案。
  • 哦,我明白了!那么,其实输出就是 sizeof(double *)?
猜你喜欢
  • 2014-03-29
  • 2010-11-01
  • 2014-11-11
  • 2013-09-17
  • 2013-07-04
  • 1970-01-01
  • 2015-05-23
  • 2021-08-26
  • 2013-07-24
相关资源
最近更新 更多