在我的程序中,我创建了一个指针数组:
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[]
无效?看起来它应该是我的另一种方式。
答案 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 []表示一个存储指针的数组,每个指针指向一个员工。但是你没有任何存储指针的数组。