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提出的问题。如果你有评论(我同意你的观点,这些都是相关的评论)关于代码质量,他们是受欢迎的,但作为评论,不是答案。