为什么函数的形式参数的数组类型转换为指针?

Tho*_*son 4 c++

以下函数的输出是"int*",这意味着形式参数被转换为整数指针.这个设计有什么必要的原因吗?为什么我们不能保留数组类型?

// the output is "int *"
#include<typeinfo>
void Func(int ar[5])
{
  printf("%s\n", typeid(ar).name();
}
int main()
{
  int ar[5];
  Func(ar);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Geo*_*che 7

这个设计有什么必要的原因吗?

这是从推测C.历史行李1,这是方便,因为你不能按值反正传递数组.

如果要保留类型,可以使用引用或指针:

void Func(int (&ar)[5]);
Run Code Online (Sandbox Code Playgroud)

或者使用模板函数来接受任意大小的数组:

template<std::size_t N> void Func(int (&ar)[N]);
Run Code Online (Sandbox Code Playgroud)