c++ - 为什么 sizeof(array) 在这两种情况下不同?

标签 c++

<分区>

Possible Duplicate:
Sizeof array passed as parameter

给定以下代码,我当前使用的系统(考虑到指针的大小,它似乎是 64 位的)打印:

32
4

现在,在这个系统上 int 的大小应该是 4 个字节,所以 8*4 = 32 是有意义的。另外,我知道指针的大小也应该是 4 个字节,这就是我猜测 foo 中的数组正在发生的情况。

我的问题是,为什么 foo 函数中的 sizeof(arr) 与 main() 中的 sizeof(myarray) 的处理方式不同,而两者都是特定的 int[8] 数组?我曾预计在这两种情况下都会收到 32,这让我感到困惑,为什么它会以其他方式结束。

#include <iostream>

void foo(int arr[8])
{
    std::cerr << sizeof(arr) << std::endl;
}

int main()
{
    int myarray[8];
    std::cerr << sizeof(myarray) << std::endl
    foo(myarray);
}

最佳答案

当传递给函数时,数组会衰减为指针,这样您就可以在 foo() 中打印 sizeof 4 字节的 int 数组指针。

sizeof(myarray) 打印数组的大小为 32(元素数 x 整数大小)。

关于c++ - 为什么 sizeof(array) 在这两种情况下不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7520625/

相关文章:

c++ - 对一对 vector 进行排序

c++ - MF 不播放来 self 的来源的视频

c++ - 读入二维 vector

c++ - 函数模板 : default type parameter

c++ - 解析为 void(void) 的模板签名被 gcc 拒绝;这是有效的 C++ 吗?

c++ - C++ 中用于数学表达式的正则表达式

c++ - QSocketNotifier : Socket notifiers cannot be enabled or disabled from another thread

c++ - 将 stringstream 作为 ostream& 传递,没有内容被读取

c++ - 将内容填充到cin中供用户编辑

c++ - 跨AVX channel 进行改组的最佳方法?