首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同一结构体类型中的结构体?

同一结构体类型中的结构体?
EN

Stack Overflow用户
提问于 2013-02-12 10:37:44
回答 2查看 6K关注 0票数 0

我怎么能有一个包含自身类型的结构呢?

代码语言:javascript
复制
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;

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

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

最终:我创建了无限递归,这是我的一个错误。我将继续删除此威胁。很抱歉让你久等了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-12 10:39:23

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

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

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

编辑现在你已经发布了一些代码,忽略了你还没有说出到底哪里出了问题,我希望你在检查你的图的时候试图迭代整个指针列表,但是你从来没有初始化过它。

当你malloc的时候,内存将是未初始化的。C中的标准实践是使用calloc,这会将所有字节设置为零。由于您似乎将nodes数组用作列表,因此可能需要向节点添加一个num_edges字段,并创建一个函数在两个节点上执行双向联接。

代码语言:javascript
复制
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是否存在优势,如下所示:

代码语言:javascript
复制
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;
}
票数 3
EN

Stack Overflow用户

发布于 2013-02-12 10:40:32

你的代码是完全有效的-在结构中有指向相同结构的指针是可以的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14824563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档