【发布时间】:2020-08-05 08:54:57
【问题描述】:
在下面的代码中,当我在main() 中打印sizeof(arr) 时,我得到输出32。但是,当我将相同的数组发送到函数print() 并打印出sizeof(arr) 时,我得到8。
我的问题是,它们不应该都是 8,因为arr 在这两种情况下都是指向第一个元素的指针吗?
代码:
#include <iostream>
using namespace std;
void print(int arr[])
{
cout << "from function print(): " << sizeof(arr);
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
cout << "from main: " << sizeof(arr) << endl;
print(arr);
return 0;
}
输出:
main.cpp:8:46: warning: ‘sizeof’ on array function parameter ‘arr’ will return size of ‘int*’ [-Wsizeof-array-argument]
main.cpp:5:20: note: declared here
from main: 32
from function print(): 8
...Program finished with exit code 0
Press ENTER to exit console.
【问题讨论】:
-
副本没有回答问题:不应该都是 8,因为在这两种情况下 arr 都是指向第一个元素的指针吗?投票重新开放。跨度>
-
通常将数组传递给函数将被“转换”为指向第一个元素的指针。这发生在这里,并导致指针的大小而不是数组内容的大小。所以感觉是重复的......无论如何,你有很多答案或多或少重复所有这些事情......
-
@Klaus,虽然我同意这是一个常见问题,但通常情况正好相反,在这种情况下,问题是为什么 sizeof 能够找出数组类型的总大小。