首页 > 解决方案 > 来自不兼容指针类型的赋值[Wincompatible-pointer-types]

问题描述

对于测试任务,我应该检测以下 C 程序中的错误:

    #include <stdlib.h>
    #include <stdio.h>
    typedef struct {
    struct chain *next;       
    int contents;  } chain; 

    int main()  {     
        int index;     
        chain *list;     
        chain *p;    
        chain *pointer;     
        list = malloc(sizeof(chain));     
        p = list;     

        for(index=0;index<10;index++) {       
            (*p).contents = index;       
            (*p).next = malloc(sizeof(chain));       
            p = (*p).next; 
           } ;     
        p = pointer = list;     
        index = 0;     

        while (index < 9) { 
            printf("cell # %d: %d\n",index,(*p).contents);       
            p = (*p).next;       
            free(pointer);       
            pointer = p;       
            index++; 
          } ;     
        printf("First cell: %d\n",(*list).contents);     
        return 0;  
      }

我收到以下 2 个错误:

Assignment from incompatible pointer type [Wincompatible-pointer-types]

在声明中p=(*p).next

我有一种感觉,这可能是微不足道的,但我是 C 的完全新手,无法弄清楚这些语句的正确语法。非常感谢帮助。

标签: cpointers

解决方案


typedef struct {
    struct chain *next;
    int contents;
} chain;

这将创建一个匿名结构chain。但是next指针是类型的struct chain*。但是struct chain您的代码中根本没有定义类型!所以编译器无法知道类型chainstruct chain.

您可以改为命名结构:

typedef struct chain {
    struct chain *next;
    int contents;
} chain;

推荐阅读