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

Why can't I pass an array of pointers in C++ as an array of pointers?

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

Employee* staff = new Employee[MAX_CAPACITY];

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

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

但这让我遇到了很多编译器错误 "member reference base type 'Employee *' is not a structure or union."

我发现如果我将函数的参数设为非数组的指针,程序运行良好:

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[]无效?对我来说应该是相反的吧。

这里:

Employee* staff = new Employee[MAX_CAPACITY];

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

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

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

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