在为链接列表编写添加功能时,我想出了以下代码
int addNode(node ** head)
{
1. node * ptr = *head;
if(ptr==NULL)
{
ptr = (node *)malloc(sizeof(node));
ptr->next = NULL;
ptr->val = (char *)malloc(10);
strcpy(ptr->val,"1");
2. *head = ptr;
}//Rest omitted
现在,只要我对指针指针的理解,当我调用此函数时
ADDNODE(安培; n)的
(n定义为node * n)我发送指针n的地址。 head =& n截至目前?在1,我使ptr指向n,即ptr =& n?是对的吗?我不明白的是为什么我需要设置* head = ptr?是不是已经直接对n进行了更改?并且ptr和* head都不指向n?
谢谢!
答案 0 :(得分:1)
ptr是* head的工作副本。与
node *ptr = *head;
你正在制作副本。如果使用ptr,则不会对head进行任何更改,因为您已经复制了指针而没有复制ptrptr。 head与n相同,它只是函数中n的名称。所以ptr不会改变n - 你使用行
*head = ptr;
改变n。
答案 1 :(得分:0)
如果您想在开头添加节点,可以这样做:
int addNode(node **head)
{
node *ptr;
if ((ptr = malloc(sizeof(*ptr))) != NULL)
{
ptr->val = (char *)malloc(10);
strcpy(ptr->val,"1");
ptr->next = *head;
*head = ptr;
}
}