为什么我的链表类型无法识别?

时间:2017-01-25 18:40:36

标签: c linked-list

这是我的C代码:

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

typedef struct node * ptr;
typedef struct node {
  int data;
  ptr next;
} item;

void printList(ptr p);

int main() {
  ptr h = NULL;

}

void printList(ptr p) {
  while(p) {
    printf("%d -> \n", ptr -> data);
    ptr = ptr -> next;
  }
}

编译代码时遇到2个错误:

error: unexpected type name 'ptr': expected expression
            printf("%d -> \n", ptr -> data);
                               ^

error: expected identifier or '('
            ptr = ptr -> next;

我试图玩各种变化,但我不明白为什么我会收到这些错误。

3 个答案:

答案 0 :(得分:4)

您指的是结构成员的类型而不是结构成员。

printf("%d -> \n", ptr -> data);
ptr = ptr -> next;

应该是

printf("%d -> \n", p->data);
p = p->next;

答案 1 :(得分:2)

  

为什么我的链表类型无法识别?

错误并不表示您的类型无法识别。实际上,第一个明确指出ptr被识别为类型名称。正如它所说的那样,问题是表达式而不是类型名称需要作为->运算符的左操作数。特别是,您似乎希望在指定的行上使用变量p而不是类型ptr。例如,

p = p->next;

答案 2 :(得分:1)

我想这是使用过于通用的类型名称的一个教训。

您已将ptr定义为类型 - 指向项目的指针的类型 - 并且在大多数情况下,您以这种方式使用它。但是在这两行中,您使用ptr,就好像它是变量的名称一样。代码中ptr类型的变量名为p