为什么我不能将C ++中的指针数组作为指针数组传递?

时间:2015-01-25 17:36:06

标签: c++ arrays pointers

在我的程序中,我创建了一个指针数组:

Employee* staff = new Employee[MAX_CAPACITY];

然后我尝试将数组传递给具有如下参数的函数:

void enter_employee_data(Employee* n[], int i)
{
     // code goes here
}

但是这给我带来了很多编译器错误,说“成员引用基类型'Employee *'不是结构或联合。”

如果我将函数的参数设置为不是数组的指针,我发现程序运行正常:

void enter_employee_data(Employee* n, int i)
{
   // code goes here
}

如果我将函数的参数设置为没有*:

的常规数组,程序也可以正常工作
void enter_employee_data(Employee n[], int i)
{
      //code goes here
}

这对我来说没有多大意义。为什么参数Employee n[]有效但Employee* n[]无效?看起来它应该是我的另一种方式。

2 个答案:

答案 0 :(得分:3)

下面:

Employee* staff = new Employee[MAX_CAPACITY];

您分配了一系列员工。但是这个函数声明:

void enter_employee_data(Employee* n[], int i)

需要一组指向员工的指针。所以你对不同类型的参数有问题。 Employee n[]Employee* n都是可以访问您分配的内存的有效类型,这就是它们工作的原因。

答案 1 :(得分:1)

您可以将数组作为Employee n []或Employee * n传递给函数。那就是我们需要传递一个指向数组的指针。 Employee * n []表示一个存储指针的数组,每个指针指向一个员工。但是你没有任何存储指针的数组。