为什么我不能在 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[] 表示一个存储指针的数组,每个指针指向一个员工。但是您没有任何存储指针的数组。
在我的程序中,我创建了一个指针数组:
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[] 表示一个存储指针的数组,每个指针指向一个员工。但是您没有任何存储指针的数组。