Hyn*_*ard 1 c gcc struct pointers
我已经在头文件中定义了结构
\n\ntypedef 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;\nRun Code Online (Sandbox Code Playgroud)\n\n我有这个代码
\n\nvoid 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}\nRun Code Online (Sandbox Code Playgroud)\n\n这对我来说似乎很好,但是当我尝试构建它时,gcc 说
\n\n\n\n\nc206.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\nc206.c:109:18: 警告:从不兼容的指针类型赋值 [-Win兼容指针类型] L->First->lptr = newPtr;
\n
你能告诉我我的代码哪里错了吗?主要是为什么当我在那里使用它时它告诉我使用'->'?谢谢
\n正如评论中提到的,您没有使用指针来正确构造。
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;(我在这里添加了另一个间接访问结构本身)。