错误遍历 C 中链接列表的列表



我编写了以下代码,但是当我尝试编译代码时,编译器显示以下错误。我的错在哪里?

编译器错误:

main.c:32:39:错误:取消引用指向不完整类型"结构信息"的指针 printf("Information : %d", ptr->_number(;

#include <stdio.h>
#include <stdlib.h>
typedef struct Informaion{
    int _number;
    struct Informaion *next;
} Information;
int main(int argc, char const *argv[]){
    Information *temp;
    Information *head;
    temp = malloc(sizeof(Information));
    temp->_number = 20;
    head = temp;
    temp = malloc(sizeof(Information));
    temp->_number = 21;
    head->next = temp;
    temp = malloc(sizeof(Information));
    temp->_number = 22;
    head->next->next = temp;
    temp = malloc(sizeof(Information));
    temp->_number = 23;
    head->next->next->next = NULL;
    struct Information *ptr = head;
    while(ptr != NULL) {
      printf("Information : %dn", ptr->_number);
      ptr = ptr->next;
   }
    free(head);
    free(temp);
    return 0;
}

您的类型名称为 struct Informaion 。在您正在使用的行中

struct Information *ptr = head;

要解决此问题,您可以修复拼写错误,也可以直接通过typedef使用它。

Information *ptr = head;

作为一般做法,您不应使用变量或任何以下划线开头的标识符。这些是为编译器保留的。建议你把_number换成别的东西。

结构定义中有拼写错误

typedef struct Informaion{
                     ^^^  
    int _number;
    struct Informaion *next;
} Information;

因此,要么使用类型说明符struct Informaion,要么在声明中的下面Information任何地方。

此代码片段

temp = malloc(sizeof(Information));
temp->_number = 23;
head->next->next->next = NULL;

没有意义。其地址存储在指针 temp 中的已分配对象不会添加到列表中。

写起来是正确的

temp = malloc(sizeof(Information));
temp->_number = 23;
head->next->next->next = temp;
head->next->next->next->next = NULL;

要释放分配的节点,您应该编写

for ( Information *ptr = head; head != NULL; ptr = head) {
  head = head->next;
  free( ptr );
}

更改行:

struct Information *ptr = head;

自:

struct Informaion *ptr = head;  //no t 

或:

Information *ptr = head;

并且错误将消失。你可以定义的类型可以使用struct InformaionInformation命名,正如你已经typedef的那样。


请注意,不鼓励使用以下划线开头的变量(例如_number变量(,因为这些名称由编译器使用。

相关内容

  • 没有找到相关文章

最新更新