警告:分配从兼容的指针类型为链表阵列

问题描述:

我执行,其中我收到警告一个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_nodetypedef),不兼容的指针转换警告时,从任何严格别名规则打破或类似的其他问题提出警告。

假设struct node是一个不完整的类型是一个小广泛和一个单独的问题。

是的,警告被抛出的线head[i] = head[i]->next;,而不是下一个:)

+1

哦,那是一个愚蠢的错误。感谢您指出:) –

检查这个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); 

} 

     } 
    } 
}