Назначение из несовместимого типа указателя [Wincompatible-pointer-types] - PullRequest
0 голосов
/ 11 апреля 2020

Для тестирования я должен обнаружить ошибки в следующей программе 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 и не могу понять правильный синтаксис для этих операторов. Помощь очень ценится.

1 Ответ

1 голос
/ 11 апреля 2020
typedef struct {
    struct chain *next;
    int contents;
} chain;

это создает анонимную структуру chain. Но указатель next имеет тип struct chain*. Но в вашем коде вообще нет типа struct chain! Таким образом, компилятор не может знать отношения между типами chain и struct chain.

. Вместо этого вы можете назвать структуру:

typedef struct chain {
    struct chain *next;
    int contents;
} chain;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...