gcc指针错误你的意思是使用' - >'吗?

时间:2017-10-22 10:54:00

标签: c pointers gcc struct

我在头文件中定义了结构

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;

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

2 个答案:

答案 0 :(得分:2)

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

typedef struct tDLElem {                 
        int data;                 
        struct tDLElem *lptr;     
        struct tDLElem *rptr; 
} *tDLElemPtr; // note that tDLElemPtr is a pointer!!

将此typedeftDLElemPtr一起使用意味着您要声明的变量是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;

这样可以更清楚地了解正在发生的事情。

相关问题