【发布时间】:2010-11-22 15:05:45
【问题描述】:
给定以下程序,
#include <iostream>
using namespace std;
void foo( char a[100] )
{
cout << "foo() " << sizeof( a ) << endl;
}
int main()
{
char bar[100] = { 0 };
cout << "main() " << sizeof( bar ) << endl;
foo( bar );
return 0;
}
输出
main() 100
foo() 4
- 为什么将数组作为指向第一个元素的指针传递?
- 它是 C 的遗产吗?
- 标准是怎么说的?
- 为什么放弃了 C++ 的严格类型安全?
【问题讨论】:
-
在这些情况下我总是使用 std::array,避免处理此类问题并且也可以使用 std 算法
-
什么严格的类型安全?谁承诺过严格的类型安全? C++ 中没有这样的东西。
-
TL;DR 以下答案:数组在传递给函数时变成指针,所以当你检查它们的大小时,你得到的只是指针的大小。如果您只使用 C,我只能建议您预先计算要从数组中取出的任何大小作为另一个参数。
标签: c++ arrays standards sizeof function-parameter