在C ++中,int [a]和int * a是否与函数定义相同?

时间:2014-09-16 04:32:30

标签: c++

对于以下函数定义,它们实际上是否全部相等?如果没有,有什么区别?

void f1(int *a)
{
    //something to do;
}

void f2(int a[])
{
    //the same as function f1
}

void f3(int a[3])
{
    //the same as function f1
}

非常感谢!

1 个答案:

答案 0 :(得分:3)

功能签名是相同的。 您可以通过使用一个名称命名所有函数来检查这一点。

void f1(int *a) {}
void f1(int a[]) {}
void f1(int a[3]) {}

您的编译器将抛出一个编译错误,例如“重新定义void f1(int *)”。现在请注意这一点,如果您重新安排功能如下:

void f1(int a[3]) {}
void f1(int a[]) {}
void f1(int *a) {}

您将收到有关“重新定义void f1(int *)”的错误消息,而不是“void f1(int a [3])”。这是因为在C ++中只有一种方法可以将指针传递给数组,而看起来像数组的函数参数只是传递指针的语法。 另请查看:Why do C and C++ compilers allow array lengths in function signatures when they're never enforced?