将指向结构数组的指针传递给函数的区别

时间:2017-10-09 05:41:48

标签: c++ arrays structure

是否可以将指向结构数组的指针传递给函数?当我尝试这种语法时,我收到一个错误。但是,如果我从函数原型中删除*并删除&我通过结构的地方,我没有收到错误,为什么?

struct Last_Payment_Date        // Date Last Payment was made by customer
{
int month;
int day;
int year;
};
struct Residence                // Residence of Customer
{
string Address;
string City;
string State;
string ZIP;
};

struct Customer                 // Customer information
{
string Name;
Residence Place;
string Telephone;
int AcctBalance;
Last_Payment_Date Date;
};

void Get_Customer_Data(Customer *[], int);      // Function prototype
void Display_Customer_Data(Customer [], int);
int main()
{
const int AMT_OF_CUSTOMERS = 2;         // Amount of customers
Customer Data[AMT_OF_CUSTOMERS];

Get_Customer_Data(&Data, AMT_OF_CUSTOMERS); // ERROR!



return 0;
}

void Get_Customer_Data(Customer *[], int n) 

1 个答案:

答案 0 :(得分:3)

例如&Data不是Customer *[]。类型Customer *[]是指向Customer的指针数组。

&Data的类型为Customer (*)[AMT_OF_CUSOTMERS]。即它是指向AMT_OF_CUSTOMERS结构数组的指针。

这两种类型非常不同。

将数组传递给函数的通常方法是让数组衰减指向其第一个元素的指针。

然后你会改为

void Get_Customer_Data(Customer *, int);      // Function prototype

并将其称为

Get_Customer_Data(Data, AMT_OF_CUSTOMERS);

以这种方式使用Data时,它与传递&Data[0]相同。