c中的结构,其属性是指向同一结构的指针

c中的结构,其属性是指向同一结构的指针,c,struct,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}}; mystr

我需要创建一个具有指向同一结构的指针属性的结构

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

    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);
}
有人能帮我吗?
致以最良好的问候和感谢

我不完全确定,但您是否在寻找某种形式的或准确的讲话

这里是另一个很好的参考


只需稍微简化一下,并在此处和那里移动一些指令,下面的代码是一个松散编写的示例,可能是您希望实现的目标

#包括
结构mystruct
{
整数;
结构mystruct*其他;
};
struct mystruct first[]={{1,NULL},{2,NULL};
struct mystruct second[]={{3,NULL},{4,NULL};
结构mystruct*wrap;
内部主(空)
{
第一个[1]。其他=第二个;
第二[1]。其他=第一;
换行=第一个[1]。其他;
printf(“%d\n”,第一个[0]。编号);
printf(“%d\n”,第二个[0]。编号);
printf(“%d\n”,包装[1]。编号);
返回0;
}

我不完全确定,但您是否在寻找某种类型的或精确的语言

这里是另一个很好的参考


只需稍微简化一下,并在此处和那里移动一些指令,下面的代码是一个松散编写的示例,可能是您希望实现的目标

#包括
结构mystruct
{
整数;
结构mystruct*其他;
};
struct mystruct first[]={{1,NULL},{2,NULL};
struct mystruct second[]={{3,NULL},{4,NULL};
结构mystruct*wrap;
内部主(空)
{
第一个[1]。其他=第二个;
第二[1]。其他=第一;
换行=第一个[1]。其他;
printf(“%d\n”,第一个[0]。编号);
printf(“%d\n”,第二个[0]。编号);
printf(“%d\n”,包装[1]。编号);
返回0;
}

C
中,您可以在使用结构之前命名它,并
typdef

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

C
中,您可以在使用结构之前对其命名,并
typdef
对其进行命名:

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

您的第一个和第二个不需要是外部的,因为它们是在您的程序中分配的。您可以声明和初始化。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;}

您的第一个和第二个不需要是外部的,因为它们是在您的程序中分配的。您可以声明和初始化。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;}

另一个完全不同的注意事项是:为什么将
第一个
第二个
声明为
extern
?因为没有extern,我的第一个测试无法工作!另一个完全不同的注意事项是:为什么将
第一个
第二个
声明为
extern
?因为没有extern,我的第一个测试无法工作!应该是评论,而不是答案。@MatthieuBrucher谢谢,我是新来的,如果你能告诉我为什么以及在哪里写的话,我会很喜欢的,所以我会正确地使用评论和答案。这并不能解决OP提出的问题。如果你对代码质量有评论(我同意你的意见,这些是相关的评论),欢迎发表评论,但作为评论,而不是答案。应该是评论,而不是答案。@MatthieuBrucher谢谢,我是新来的,如果你能告诉我为什么以及在哪里写的话,我会喜欢它。因此,我将正确地使用评论和答案。这并不能解决OP提出的问题。如果你有评论(我同意你的观点,这些都是相关的评论)关于代码质量,他们是受欢迎的,但作为评论,不是答案。