c语言数据结构链表问题 在线求教

来源:百度知道 编辑:UC知道 时间:2024/06/27 10:28:59
struct listNode{ //自引用结构
char data;
struct listNode *nextPtr;
};

typedef struct listNode LISTNODE;
typedef LISTNODE * LISTNODEPTR;

void insert(LISTNODEPTR *,char );//插入一个元素
请问typedef LISTNODE * LISTNODEPTR; 中的 LISTNODEPTR已经是个指针了 为什么在 插入函数中还要用LISTNODEPTR * 做参数 其中的 *是什么意思 请帮我解答下

//你理解清楚了有没有的更多分加呀,嘿嘿。
因为C语言传递参数一般是传值调用,用指向指针的指针来获得类似传引用调用的效果,考虑的时候,头脑中一定要有内存的形象。
为了说明这个问题,作个假设,这个链表中插入函数为void insert(LISTNODEPTR sPtr ,char );LISTNODEPTR 参数为头结点,而现在要插入的结点在头结点之前。由于这里传递的是sPtr里面的值,所以会在内存中重新分配一个空间,用来存储sPtr里面的内容(是一个地址值),那么你将sPtr头结点转为指向新插入的结点时,实际上不是你想要你操作的头结点,而是另一个内存块。返回后头结点不会变,也就是说插入不成功。
代码如下:
if (previousPtr==NULL){previousPtr为前驱结点
newPtr->newPtr=sPtr;
sPtr=newPtr;
}