gpt4 book ai didi

c - 结构内部相同的结构类型?

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

我怎样才能拥有包含自身类型的结构。

struct node { struct node *nodes[MAX]; int ID; };

struct node *node1, *node2;
node1 = (struct node*) malloc(sizeof(struct node));
node2 = (struct node*) malloc(sizeof(struct node));
node1->ID = 1;
node2->ID = 2;
node1->nodes[0] = node2;
node2->nodes[0] = node1;

没有错误,但程序没有正确执行。

编辑:我添加了更多代码。

最后:我犯了一个错误,我创建了一个无限递归。我将继续删除此威胁。很抱歉耽误您的时间。

最佳答案

那是因为您存储了指向该结构的指针 数组。那是完全不同的。

您不能在其内部拥有相同的结构。那将是一个无限递归的定义。

现在,如果您愿意展示更多您的程序,我们或许能够帮助您理解为什么您的程序没有按您预期的方式运行。很可能您还没有初始化指针,因为对它们到底是什么感到困惑。

[edit] 既然您已经发布了一些代码,请忽略您没有说出到底出了什么问题,我希望您在检查时尝试遍历整个指针列表你的图表,但你从未初始化它。

当您malloc 时,内存将不会被初始化。 C 中的标准做法是使用 calloc 代替,它将所有字节设置为零。由于您似乎将 nodes 数组用作列表,因此您可能希望将 num_edges 字段添加到节点并创建一个函数来执行双向连接两个节点。

struct node {
int num_edges;
struct node *nodes[MAX];
};

int join( struct node *a, struct node *b )
{
if( a->num_edges >= MAX || b->num_edges >= MAX ) return 0;
a->nodes[a->num_edges++] = b;
b->nodes[b->num_edges++] = a;
return 1;
}

您还可以像这样测试从 ab 是否存在边:

int has_edge( struct node *a, struct node *b )
{
int i;
for( i = 0; i < a->num_edges; i++ ) {
if( a->nodes[i] == b ) return 1;
}
return 0;
}

关于c - 结构内部相同的结构类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824563/

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