c中的struct,其属性是指向相同struct的指针

时间:2018-10-21 09:14:58

标签: c struct

我需要创建一个结构,该结构的属性是指向同一结构的指针。

我正在尝试此解决方案,但不起作用:

    typedef struct
{
    int number;
    void *other;
}mystruct;

extern mystruct first[];
extern mystruct second[];

mystruct first[] = {{1,NULL},{2,second}};
mystruct second[] = {{3,NULL},{4,first}};

mystruct *wrap;
wrap = (mystruct *)first[1].other;

int main(void){
    printf("%d\n",first[0].number);
    printf("%d\n",second[0].number);
    printf("%d\n",wrap[1].number);
}

有人可以帮助我吗? 最好的问候和谢谢

3 个答案:

答案 0 :(得分:2)

我不确定,但是您是要寻找linked-lists还是说Self Referential structure

struct list {
   int something;
   struct list *use_this_to_point_to_similar_type;
};

这里是另一个很好的参考书what-is-self-referencing-structure-in-c


只是一点点简化,在这里到处移动一些指令,下面的代码是 可能是您期望实现的目标

#include<stdio.h>
struct mystruct
{
    int number;
    struct mystruct *other;
};


struct mystruct first[] = {{1,NULL},{2,NULL}};
struct mystruct second[] = {{3,NULL},{4,NULL}};
struct mystruct *wrap;

int main(void)
{
        first[1].other = second;
        second[1].other = first;
        wrap = first[1].other;

        printf("%d\n",first[0].number);
        printf("%d\n",second[0].number);
        printf("%d\n",wrap[1].number);

        return 0;
}

答案 1 :(得分:1)

ch中,您可以在使用结构并将其ch命名之前命名该结构:

C

答案 2 :(得分:0)

您的第一个和第二个不需要在外部,因为它们是在程序中分配的。您可以声明和初始化。 var在主体之前。但其余的必须移至主要功能:

int main(void){

wrap = (first[1].other);

printf("%d\n",first[0].number);  
printf("%d\n",first[1].number); 
printf("%d\n",second[0].number);
printf("%d\n",wrap[1].number);
return 0;}