您的位置:首页 > 其它

链表与指向指针的指针应用

2012-06-11 23:38 316 查看
示例代码如下,假设单链表如下:
typedef struct Node{
ElemType data;
Node *next;
}Node;
typedef struct Node *LNodelist;

现需要初始化链表头结点,设函数为:

void create(Node *list)
{
list = (Node *)malloc(sizeof(Node));
if (NULL == list)
{
……;
}
return;
}
以上函数为经典常犯错误,今天还犯了以上错误。通过对以上函数当在下面main函数中调用时,简单情况下不会发生编译错误,但是运行结果却会发现调用create(first)函数后,并未对头结点进行了初始化分配了空间,仍然为NULL。
int main(void)
{
Node *first = NULL;

create(first);

return 0;
}



针对以上问题,可以做如下解决,引入指向指针的指针:

void create(Node **list)
{
Node *p = NULL;
p = (Node *)malloc(sizeof(Node));
if (NULL ==p)
{
……;
}
*list = p;
}


主函数中调用相应改为:

int main(void)
{
Node *first = NULL;

create(&first);

return 0;
}
或者还可以改为:

Node *create()
{
Node *p = Null;
p = (Node *)malloc(sizeof(Node));

if(p == NULL)
{……}

return p;
}
main函数调用为:

int main(void)
{
Node *first = NULL;

first = create();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐