【发布时间】:2020-07-28 20:13:48
【问题描述】:
让我们考虑以下代码:
#include <iostream>
using namespace std;
void foo(int * arr)
{
cout << sizeof(arr) << endl;
}
int main()
{
int arr[3] = {1, 2, 3};
cout << sizeof(arr) << endl;
foo(arr);
}
既然数组名衰减为指向其第一个元素的指针,为什么foo() 内部的sizeof(arr) 返回8 而不是4?
【问题讨论】:
-
因为在您的系统上指针的大小是 8? (这在 64 位平台上很常见)
-
在 C++ 中,您应该传递
std::vector或std::array,具体取决于您的用例。否则,在 C API 中,每个数组传递两个参数是规范的:首先是指向数组的指针,其次是元素的数量。 -
@michalt38 请重新阅读您自己写的内容。 “由于数组名称衰减为指向其第一个元素的指针,为什么 foo() 中的 sizeof(arr) 返回 8 而不是 4?”有时理解你在写什么是非常有用的。
标签: c++ arrays pointers parameter-passing sizeof