我在头文件中定义了结构
typedef struct tDLElem {
int data;
struct tDLElem *lptr;
struct tDLElem *rptr;
} *tDLElemPtr;
typedef struct {
tDLElemPtr First;
tDLElemPtr Act;
tDLElemPtr Last;
} tDLList;
我有这段代码
void DLInsertFirst (tDLList *L, int val) {
tDLElemPtr *newPtr = (tDLElemPtr *) malloc(sizeof(struct tDLElem));
if (newPtr == NULL)
DLError();
newPtr->lptr = NULL;
newPtr->rptr = L->First;
newPtr->data = val;
if (L->First != NULL)
{
L->First->lptr = newPtr;
}
else
{
L->Last = newPtr;
}
L->First = newPtr;
}
对我来说似乎很好但是当我尝试构建它时,gcc说
c206.c:在函数'DLInsertFirst'中:c206.c:104:8:错误:'* newPtr'是 指针;你的意思是使用' - >'吗? newPtr-> lptr = NULL;
c206.c:109:18:警告:从不兼容的指针类型分配[-Wincompatible-pointer-types] L-> First-> lptr = newPtr;
你能告诉我我的代码在哪里错了吗?而且主要是为什么它告诉我使用' - >'当我在那里使用它?感谢
答案 0 :(得分:2)
正如评论中所提到的,你没有正确使用指针来构造。
typedef struct tDLElem {
int data;
struct tDLElem *lptr;
struct tDLElem *rptr;
} *tDLElemPtr; // note that tDLElemPtr is a pointer!!
将此typedef
与tDLElemPtr
一起使用意味着您要声明的变量是struct tDLElem *
(指针!!! ),因此tDLElemPtr *newPtr
是一个指向指针(struct tDLElem **
)的指针,意思是newPtr->lptr = NULL;
实际应该是(*newPtr)->lptr = NULL;
(我在这里添加了另一个间接访问结构本身)。
答案 1 :(得分:1)
我怀疑你的第一个数据结构应该是这样的:
struct tDLElem {
int data;
struct tDLElem* lptr;
struct tDLElem* rptr;
};
typedef struct tDLElem* tDLElemPtr;
这样可以更清楚地了解正在发生的事情。