对于以下函数定义,它们实际上是否全部相等?如果没有,有什么区别?
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
}
非常感谢!
答案 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?