【问题标题】:Warning on pointer assignment指针分配警告
【发布时间】:2017-09-04 14:13:05
【问题描述】:

我有以下代码:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct node {
    int data;
    struct Node* next;
} Node;

typedef struct link_list {
    Node* HEAD;
} LinkList;

void kill(const char* message) {
    printf("ERROR: %s\n", message);
    exit(-1);
}

LinkList* createList() {
    LinkList* list = malloc(sizeof(LinkList));
    list->HEAD = NULL;
    return list;
}

Node* createNode() {
    Node* node = malloc(sizeof(Node));
    node->next = NULL;
    node->data = 0;
    return node;
}

void insert(LinkList* list, int data) {
    if(list == NULL)
        kill("Cannot insert. The given list is NULL.");

    Node* node = createNode();
    node->data = data;

    if(list->HEAD == NULL) {
        list->HEAD = node;
        return;
    }

    Node* it = list->HEAD;
    while(it->next != NULL) {
        it = it->next;
    }

    it->next = node;
}

void display(LinkList* list) {
    if(list == NULL)
        kill("The given link list has not been initialized.");

    Node* it = list->HEAD;

    if(list->HEAD == NULL)
        kill("The given link list is empty.");

    while(1 == 1) {     
        printf("%d ", it->data);
        it = it->next;
        if(it == NULL)
            break;
    }

    printf("\n");
}

void main() {
    int numbers;
    int data;

    LinkList* list = createList();

    printf("How many numbers?\n");
    scanf("%d", &numbers);

    for (int i = 0; i < numbers; ++i)
    {
        printf("Insert data of element %d: ", i + 1);
        scanf("%d", &data);

        insert(list, data);
    }

    display(list);
}

我收到以下警告:

据我了解,为指针赋值似乎存在问题。但据我所知,LHS 和 RHS 类型似乎是相同的! (Node*).

这是否与 next 被定义为 struct Node* next 而我分配给它的值是 Node* 这一事实有关?

【问题讨论】:

  • struct node的定义中使用struct node* next;,而不是struct Node* next;
  • 几天前出现了完全相同的问题....相同的错误,相同的命名...
  • 您可以从控制台复制和粘贴文本。
  • 下次可以发错误信息的时候不要发错误信息的图片。
  • 基本上没有struct Node,从来没有定义过。如果您看到警告“分配不兼容的指针类型”,这几乎总是一个错误。

标签: c pointers gcc


【解决方案1】:

改变

typedef struct node {
    int data;
    struct Node* next;
} Node;

进入

typedef struct node {
    int data;
    struct node* next;
} Node;

【讨论】:

    【解决方案2】:

    Node 类型直到 Node 定义结束时才未知:

    typedef struct node {
        int data;
        struct Node* next;
    } Node;
    

    改成:

    typedef struct node {
        int data;
        struct node* next;
    } Node;
    

    【讨论】:

      【解决方案3】:

      这会很好,

      typedef struct node {
          int data;
          struct node* next;
      } Node;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-03
        • 2014-10-10
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多