gpt4 book ai didi

c - malloc 的结构问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:47 25 4
gpt4 key购买 nike

今天我想尝试一些我在 struct 中学到的东西,但不幸的是它没有编译......

这是我的代码

struct Addresse
{
char street[20];
};


struct Person
{
char name[20];
int age;
char job[20];
struct Addresse mainstreet;
};

void callbyReference(struct Person* p)
{
printf("%s,%d,%s,%s\n",p->name,p->age,p->job,p->mainstreet.street );
}


int main(int argc, char const *argv[])
{
struct Person *person;
person = (struct Person*) malloc(sizeof(struct Person));

strcpy(person.name, "Max");
person.age = 14;
strcpy(person.job,"firefighter");
strcpy(person.mainstreet.street,"Fressnitz");

callbyReference(&person);
free(person)

return 0;
}

当我编译它时有这个错误警告:请求成员作业不是结构或 union 。

最佳答案

您的代码中有两个错误。

在使用 malloc() 分配 struct Person 实例并将其分配给您的 person 变量后,您将使用. 运算符,但由于 person 是一个指针,您需要改用 -> 运算符:

struct Person *person;
...
strcpy(person->name, "Max");
person->age = 14;
strcpy(person->job,"firefighter");
strcpy(person->mainstreet.street,"Fressnitz");

一旦你解决了这个问题,你就会得到一个新的错误,因为 callbyReference() 需要一个 struct Person * 指针,即一个直接指向实际 的指针>Person 实例,但是您传递给它的是 struct Person ** 指针,即指向 Person 实例的指针:

struct Person *person;
...
callbyReference(&person);

因此,在将 person 变量传递给 callbyReference() 时,去掉 & 地址运算符,因为它已经是一个合适的指针原样:

callbyReference(person);

如果您在堆栈上分配 person 而不是通过 malloc,您的代码将正确使用 .& 运算符(),例如:

int main(int argc, char const *argv[])
{
struct Person person;

strcpy(person.name, "Max");
person.age = 14;
strcpy(person.job,"firefighter");
strcpy(person.mainstreet.street,"Fressnitz");

callbyReference(&person);

return 0;
}

关于c - malloc 的结构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46533435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com