C 一个结构存储在另一个结构中

C 一个结构存储在另一个结构中,c,graph,nodes,structure,C,Graph,Nodes,Structure,我试图理解为什么赋值g.node=n1不可能 有人能解释一下吗? 其思想是使用结构创建具有节点的图。我原以为这个方法会奏效,但我得到了错误:赋值中的不兼容类型g.node=n1 #include <stdio.h> typedef struct { int value; int *edges; int *adj; } Node; typedef struct { Node *node; } Graph; void resize_array(c

我试图理解为什么赋值
g.node=n1不可能

有人能解释一下吗? 其思想是使用结构创建具有节点的图。我原以为这个方法会奏效,但我得到了
错误:赋值中的不兼容类型
g.node=n1

#include <stdio.h>

typedef struct
{
    int value;
    int *edges;
    int *adj;
}  Node;

typedef struct
{
    Node *node;

} Graph;

void resize_array(char *, int);
void copy_array  (char *, char *);
int main()
{
    Graph g;
    Node n1, n2;
    int edgesS[1] = {9};
    int adjS[1] = {5};
    n1.edges = edgesS;
    n1.adj = adjS;
    n1.value = 1;
    g.node = n1;
    return 0;
}

void resize_array(char * array, int size){array[size] = '\0';}
#包括
类型定义结构
{
int值;
int*边;
int*adj;
}节点;
类型定义结构
{
节点*节点;
}图形;
void resize_数组(char*,int);
无效复制_数组(char*,char*);
int main()
{
图g;
节点n1,n2;
int-edges[1]={9};
int adjS[1]={5};
n1.边缘=边缘;
n1.adj=adjS;
n1.数值=1;
g、 节点=n1;
返回0;
}
void resize_数组(char*array,int size){array[size]='\0';}

g.node
属于
node*
类型,但
n1
属于
node
类型。这项任务将尽可能完成

g.node = &n1;

相反。请注意,
g.node
仅指向
节点
;它不包含一个的内存。使用上述简单赋值,当
n1
超出范围时,指向的内存
g.node
将变为无效。

您正在尝试为指针赋值。尝试使用n1的地址,但在“使其工作”之前,请先考虑一下这意味着什么。

图形包含指向节点的指针。
要完成所需操作,需要分配新节点的地址

g.node = &n1;

你正在学习C语言教程。现在,正如编译器所说:
赋值中的不兼容类型
。想一想这些类型。犹豫是否投票结束。这是一个很有道理的问题,对于C语言新手来说,这是一个非常非常常见的问题,可能还有整个工具链。好的,谢谢。我想它处理指针和数组一样。谢谢。我理解指针是什么,但对C如何处理各种数据类型的指针感到困惑。