代码之家  ›  专栏  ›  技术社区  ›  Thomson

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

c++
  •  4
  • Thomson  · 技术社区  · 16 年前

    下面函数的输出是“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;
    }
    
    2 回复  |  直到 16 年前
        1
  •  7
  •   Georg Fritzsche    16 年前

    这种设计有什么必要的理由吗?

    1 这很方便,因为无论如何都不能按值传递数组。

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

    void Func(int (&ar)[5]);
    

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

    template<std::size_t N> void Func(int (&ar)[N]);