【发布时间】:2019-03-03 07:43:58
【问题描述】:
我正在尝试使用邻接列表来实现图形,据我所知,如果我创建变量 array 指向 struct adjlistnode 大小为 v*sizeof(struct adjlistnode) 的变量,我可以存储 v @987654324 的地址@type 数组每个索引中的节点
意味着数组的每个索引都将指向 struct adjlistnode 类型的节点,但是当我分配 G->array[i]=NULL 时,它会给我错误
||=== Build: Debug in teeest (compiler: GNU GCC Compiler) ===|
C:\Users\Mahi\Desktop\DATA STR\teeest\main.c||In function 'creategraph':|
C:\Users\Mahi\Desktop\DATA STR\teeest\main.c|59|error: incompatible types when assigning to type 'struct adjlistnode' from type 'void *'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
为什么我不能将 NULL 分配给数组的索引
如果我想访问邻接列表,例如使用与ith 顶点相邻的G->array[i]=第一个节点地址,我应该怎么做,然后如果需要,我将添加另一个节点
struct adjlistnode{
int dest;
struct adjlistnode* next;
};
struct graph{
int V;
struct adjlistnode* array;
};
struct adjlistnode* getnewnode(int dest){
struct adjlistnode* newnode =(struct adjlistnode*)malloc(sizeof(struct adjlistnode));
newnode->dest=dest;
newnode->next=NULL;
return newnode;
}
struct graph* creategraph(int v){
struct graph* G=(struct graph*)malloc(sizeof(struct graph));
G->V=v;
G->array=(struct adjlistnode*)malloc(v*sizeof(struct adjlistnode));
for(int i=0;i<v;i++){
G->array[i] =NULL;
}
return G;
}
【问题讨论】:
-
因为只有指针可以是
NULL。您的G->array不是指针数组 -
至少在 C 中所有这些强制转换都是无用的。
标签: c arrays pointers data-structures structure