gpt4 book ai didi

c++ - 为什么衰减到数组参数的指针似乎不适用于 sizeof()?

转载 作者:可可西里 更新时间:2023-11-01 18:06:53 33 4
gpt4 key购买 nike

我之前读过一个问题,由于与此完全相同而被关闭

When a function has a specific-size array parameter, why is it replaced with a pointer?

How to find the 'sizeof' (a pointer pointing to an array)?

但读完这篇文章后,我仍然对 sizeof() 的工作原理感到困惑。我知道将数组作为参数传递给函数,例如

  void foo(int a[5])

将导致数组参数衰减为指针。我在上述 2 个问题链接中没有找到关于为什么 sizeof() 函数本身免于(或至少看似免于)这种指针衰减行为的明确答案。如果 sizeof() 的行为与任何其他函数一样,则

   int a[5] = {1,2,3,4,5};
cout << sizeof(a) << endl;

那么上面的代码应该输出 4 而不是 20。我是否错过了一些明显的东西,因为这似乎与指针行为的衰减相矛盾???很抱歉再次提出这个问题,但我真的很难理解为什么会发生这种情况,尽管多年来一直愉快地使用该功能而没有真正考虑过它。

最佳答案

因为标准是这么说的(强调我的):

(C99, 6.3.2.1p3) "Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type "array of type" is converted to an expression with type "pointer to type" that points to the initial element of the array object and is not an lvalue."

请注意,对于 C++,标准明确表示大小是数组的大小:

(C++11, 5.3.3p2 sizeof) "[...] When applied to an array, the result is the total number of bytes in the array. This implies that the size of an array of n elements is n times the size of an element."

关于c++ - 为什么衰减到数组参数的指针似乎不适用于 sizeof()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11283361/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com