如何定义两个结构,每个结构用于第二个结构? C语言

时间:2019-04-05 19:23:49

标签: c struct compilation

我可以定义两个结构并在另一个结构中使用每个结构吗? 我的代码如下。

我尝试使用typedef,但不起作用。

ereturn list

J:\ Collage_Library \ main.c | 23 |错误:重新定义“结构Auther” |

2 个答案:

答案 0 :(得分:4)

struct不能在第一个struct内的另一个struct内,原因是,在现实世界中,您不能将一个对象放入第一个对象内的另一个对象内

一个对象可以使用指针引用另一个对象。

例如,struct Book的成员可以是指向struct Author的指针,也可以是指向struct Author的指针的数组。可以这样声明:

struct Book
{
    int isbn;
    char title[21];
    struct Author *bauthor[21]; // Array of pointers to struct Author.
    int numofauth;
    char section[21];
    int copies;
};

类似地,struct Author可以包含指向struct Book的指针:

struct Author
{
    char auth_name[21];
    struct Book *auth_books[21]; // Array of pointers to struct Book.
};

创建struct Bookstruct Author对象时,必须填写指针。为此,您将必须创建每个结构,然后将值分配给指针。例如:

struct Book *b = malloc(sizeof *b);
if (b == NULL) ReportErrorAndExit();
struct Author *a = malloc(sizeof *a);
if (a == NULL) ReportErrorAndExit();

b->isbn = 1234;
strcpy(b->title, "Forward Declarations");
b->bauthor[0] = a; // List a as one of b's authors.
b->numofauth = 1;
strcpy(b->section, "Structures");
b->copies = 1;

strcpy(a->auth_name, "C committee");
a->auth_books[0] = b; // List b as one of a's books.

答案 1 :(得分:1)

这是一个简单的示例,具有一对一的引用。

#include  <stdio.h>

struct Book {
    char title[21];
    struct Auth *auth;
};

struct Auth {
    char name[21];
    struct Book *book;
};


int main(void)
{  
    struct Auth a = { "People of God" , NULL };
    struct Book b = { "42-line Bible", &a };
    a.book = &b;

    printf("book title:  %s\r\n", b.title);
    printf("book author: %s\r\n", b.auth->name);

    printf("auth name:   %s\r\n", a.name);
    printf("auth book:   %s\r\n", a.book->title);

    return 0;
}