为什么这些不是重载函数?

时间:2015-04-30 19:36:15

标签: c++ arrays pointers

我在这里读到: C: differences between char pointer and array char指针和char数组不一样。因此,我希望这些是重载函数:

#include <iostream>
using namespace std;

int function1(char* c)
{
    cout << "received a pointer" << endl;
    return 1;
}
int function1(char c[])
{
    cout << "received an array" << endl;
    return 1;
}

int main()
{
    char a = 'a';
    char* pa = &a;
    char arr[1] = { 'b' };

    function1(arr);
}

然而,在构建时,我得到错误C2084:function&#39; int function1(char *)&#39;已经有一个身体。为什么编译器似乎认为char指针与char数组相同?

1 个答案:

答案 0 :(得分:0)

因为当你将一个数组传递给一个函数时,它会神奇地变成一个指针。

您的两个功能 相同。

以下字面*相同:

void foo(int arr[42]);
void foo(int arr[]);
void foo(int* arr);

(*不是词汇,当然:P)

这个历史性的C奇怪是许多人错误地认为“数组是指针”的主要原因。它们不是:这只是一个引起混淆的边缘案例。