gpt4 book ai didi

c - 如何在c中使用结构体作为变量?

转载 作者:行者123 更新时间:2023-11-30 20:36:55 25 4
gpt4 key购买 nike

基本上我试图在我的程序中使用结构作为变量。所以我创建了一个带有两个变量的 typedef 结构类型(一个是 char* ,另一个是该类型的结构),当该类型的结构传递到函数中时,它将值分配给结构变量的 char 变量,然后再次将该结构传递到该函数中(因为它是递归的),这可能没有意义,所以希望您可以通过查看代码来了解我的意思!我以前从未使用过结构,所以我有点困惑。我无法在这里发布完整的代码,所以我只是随机编写一个基本示例。我是这样定义的:

typedef struct person
{
char* gender;
struct person relative;
};

void randomfunction(struct person person)
{
if(person.gender=="female")
{
return;
}
person.relative.gender = "male";

randomfunction(struct person relative);
}

struct person john
{
gender="male";
relative;
}

int main()
{
randomfunction(john)
return 0;
}

我目前收到以下错误: 错误:字段“相对”的类型不完整

警告:空声明中无用的存储类说明符 };

错误:“结构”之前的预期表达式 randomfunction(struct personrelative);

如果有人能告诉我如何正确执行此操作、修复我的代码或对我可能做错的事情有任何有用的评论,请继续!谢谢

最佳答案

你的代码不应该编译

  1. 您没有 typedef 的类型名称,但您不需要 typedef 任何内容,因为您使用 声明了您的实例>struct person 实例,因此struct 定义应该是

    struct person
    {
    char *gender;
    struct person *relative; // This must be a poitner since
    } // struct person has an incomplete
    // type at this point.
  2. 你不能像这样初始化结构体

    struct person john
    {
    gender = "male"; // This is invalid (if it's not it's the wrong language)
    relative;
    }

要更改可以在 main() 中声明的 struct 实例(您不需要它是全局的),你应该将它的地址作为函数的指针传递,就像这样

void randomfunction(struct person *person)
{
if (strcmp(person->gender, "female") == 0)
{
return;
}
}

另外,

  1. 您不能将 中的字符串与 == 运算符进行比较,它只是比较指针,几乎可以肯定比较会导致 false,要比较您需要的字符串 strcmp() .
  2. 您无法直接修改 structrelative 字段,即不为其分配空间,您需要类似的内容

    void randomfunction(struct person *person)
    {
    struct person *relative;
    if (strcmp(person->gender, "female") == 0)
    {
    return;
    }
    person->relative = NULL;

    relative = malloc(sizeof(*relative));
    if (relative == NULL) // On allocation failure
    return; // Now `person->relative' is `NULL'
    relative->gender = "male";
    // Make `person->relative` point to a valid `struct person'
    person->relative = relative;
    }

    你会像这样使用这个函数

    int main(void)
    {
    struct person person;

    person.gender = "female"; // Initialize it or it would be a
    person.relative = NULL; // problem to call `randomfunction()'

    randomfunction(&person);
    }

关于c - 如何在c中使用结构体作为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34688122/

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