这是我的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;
我试图玩各种变化,但我不明白为什么我会收到这些错误。
答案 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
。