警告:分配从兼容的指针类型为链表阵列
问题描述:
我执行,其中我收到警告一个C程序:从兼容的指针类型分配警告:分配从兼容的指针类型为链表阵列
我复制本文相关的代码: 警告
//Structure I am using:
typedef struct graph_node
{
int id;
int weight;
struct node *next;
}node, dummy;
node *head[10];
// Function which is generating this warning:
void print_list()
{
int i;
for (i = 0;i< vertex; i++)
{
printf ("\n ==>>%d ", head[i]->id);
while (head[i]->next != NULL)
{
head[i] = head[i]->next;
printf ("\t ==>>%d ", head[i]->id); /******This line is generating warning ********/
}
}
}
以上代码编译好与抛出低于警告:
警告:从兼容的指针类型分配用于链表阵列
答
你不应该写struct node *next;
作为node
不是typedef
ed尚未和struct node
根本不存在。
你应该重新申报的结构为:
typedef struct graph_node
{
int id;
int weight;
struct graph_node *next;
/* ^^^^^^ */
}node, dummy;
为什么我的代码编译,然后
当你写只是struct node *next;
,你的编译器假定struct node
是一个不完整的类型(只声明)并允许指向这种类型的指针。
当您转换struct node
类型的指针node
(这是一个struct graph_node
typedef
),不兼容的指针转换警告时,从任何严格别名规则打破或类似的其他问题提出警告。
假设struct node
是一个不完整的类型是一个小广泛和一个单独的问题。
是的,警告被抛出的线head[i] = head[i]->next;
,而不是下一个:)
答
检查这个code.i认为它可能会work.and发布完整的代码,所以我可以解决完成。
typedef struct graph_node
{
int id;
int weight;
struct node *next;
}node, dummy;
node *head[10];
// Function which is generating this warning:
void print_list()
{
int i;
for (i = 0;i< vertex; i++)
{
printf ("\n ==>>%d ", head[i]->id);
while (head[i]->next->next != NULL)
{
head[i] = head[i]->next;
printf ("\t ==>>%d ", head[i]->id);
if(head[i]->next==NULL)
{
printf ("\t ==>>%d ", head[i]->id);
}
}
}
}
哦,那是一个愚蠢的错误。感谢您指出:) –