gcc 指针错误 您的意思是使用“->”吗?

Hyn*_*ard 1 c gcc struct pointers

我已经在头文件中定义了结构

\n\n
typedef struct tDLElem {                 \n        int data;                 \n        struct tDLElem *lptr;     \n        struct tDLElem *rptr; \n} *tDLElemPtr;\n\ntypedef struct { \n    tDLElemPtr First;\n    tDLElemPtr Act; \n    tDLElemPtr Last;\n} tDLList;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我有这个代码

\n\n
void DLInsertFirst (tDLList *L, int val) {\n    tDLElemPtr *newPtr = (tDLElemPtr *) malloc(sizeof(struct tDLElem));\n    if (newPtr == NULL)\n        DLError();\n    newPtr->lptr = NULL;\n    newPtr->rptr = L->First;\n    newPtr->data = val;\n    if (L->First != NULL)\n    {\n        L->First->lptr = newPtr;\n    }\n    else\n    {\n        L->Last = newPtr;\n    }\n    L->First = newPtr;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这对我来说似乎很好,但是当我尝试构建它时,gcc 说

\n\n
\n

c206.c: 在函数 \xe2\x80\x98DLInsertFirst\xe2\x80\x99 中: c206.c:104:8: 错误: \xe2\x80\x98*newPtr\xe2\x80\x99 是指针;您的意思是使用 \xe2\x80\x98->\xe2\x80\x99 吗?newPtr->lptr = NULL;

\n\n

c206.c:109:18: 警告:从不兼容的指针类型赋值 [-Win兼容指针类型] L->First->lptr = newPtr;

\n
\n\n

你能告诉我我的代码哪里错了吗?主要是为什么当我在那里使用它时它告诉我使用'->'?谢谢

\n

CIs*_*ies 7

正如评论中提到的,您没有使用指针来正确构造。

typedef struct tDLElem {                 
        int data;                 
        struct tDLElem *lptr;     
        struct tDLElem *rptr; 
} *tDLElemPtr; // note that tDLElemPtr is a pointer!!
Run Code Online (Sandbox Code Playgroud)

使用它typedef意味着tDLElemPtr您将声明的变量是一个struct tDLElem *指针!!!),因此tDLElemPtr *newPtr是一个指向指针(struct tDLElem **)的指针,newPtr->lptr = NULL;实际上应该是(*newPtr)->lptr = NULL;(我在这里添加了另一个间接访问结构本身)。