c++结构体数组指针


#include
using namespace std;
#include

struct contacts
{
    string name;
    string sex;
    int age;
    string number;
    string address;
};

void add(contacts * p[])
{
    int k;
    cout << "请选择存储位置:";
    cin >> k;
    cout << "请输入联系人的姓名:";
    cin >> p[k-1]->name;
    cout << "请输入联系人的性别:";
    cin >> p[k-1]->sex;
    cout << "请输入联系人的年龄:";
    cin >> p[k-1]->age;
    cout << "请输入联系人的号码:";
    cin >> p[k-1]->number;
    cout << "请输入联系人的住址:";
    cin >> p[k-1]->address;
}

int main()
{
    contacts list[1000];
    add(list);
    system("pause");
    return 0;
}

main函数里的add(list)怎么不对了呀,报错说是"contacts *" 类型的实参与 "contacts **" 类型的形参不兼容

参考GPT和自己的思路:

问题出在定义函数add的形参类型上。add函数语句中的形参p是一个指向contacts结构体数组指针的指针,即contacts **p。而在main函数中,传入的实参是一个contacts结构体数组list,类型为contacts *。这两种类型是不兼容的,因此会报错。解决方法是将函数add的形参改为指向contacts结构体数组的指针,即contacts *p。修改后的add函数代码如下:

void add(contacts *p)
{
    int k;
    cout << "请选择存储位置:";
    cin >> k;
    cout << "请输入联系人的姓名:";
    cin >> p[k-1].name;
    cout << "请输入联系人的性别:";
    cin >> p[k-1].sex;
    cout << "请输入联系人的年龄:";
    cin >> p[k-1].age;
    cout << "请输入联系人的号码:";
    cin >> p[k-1].number;
    cout << "请输入联系人的住址:";
    cin >> p[k-1].address;
}

参数不要加中括号,加了中括号,参数就是指针的指针类型啦

 
#include<iostream>
using namespace std;
#include<string>
 
struct contacts
{
    string name;
    string sex;
    int age;
    string number;
    string address;
};
 
void add(contacts * p)
{
    int k;
    cout << "请选择存储位置:";
    cin >> k;
    cout << "请输入联系人的姓名:";
    cin >> p[k-1]->name;
    cout << "请输入联系人的性别:";
    cin >> p[k-1]->sex;
    cout << "请输入联系人的年龄:";
    cin >> p[k-1]->age;
    cout << "请输入联系人的号码:";
    cin >> p[k-1]->number;
    cout << "请输入联系人的住址:";
    cin >> p[k-1]->address;
}
 
int main()
{
    contacts list[1000];
    add(list);
    system("pause");
    return 0;
}

add(list);

修改为

add(&list);