新人关于函数内指针传出的迷惑!(自己写的链表程序有问题)

木叶7 发布于 2017/03/04 14:36
阅读 162
收藏 0

Serverless 架构就不要服务器了?>>>

typedef struct Linklist{
    int elem;
    Linklist * next;
}Linklist;

int add(Linklist* head,int e) 
{
    if (head == NULL)
    {
        head = (Linklist*)malloc(sizeof(Linklist));
        head->elem = e;
        return 1;
    }
    Linklist* tem = head;
    int count = 1;
    while (tem->next != NULL)
    {
        tem = tem->next;
        count++;
    }
    Linklist* tem_next = (Linklist*)malloc(sizeof(Linklist));
    tem->next = tem_next;
    tem_next->elem = e;
    return count;
}

 

int main()
{
    Linklist* head = NULL;
    add(head, 1);
   
    return 0;
}

 

 

代码如上所示,定义链表的添加方法,在头指针为空的时候进行调试,显示在add函数内部的时候head指针被赋予了值,当跳出函数后head指针又为NULL,函数传递的参数是指针类型,为什么函数结束后head指针会为空呢,一直很不解,求大牛们给出详细的解释!!!

加载中
0
zwcloud
zwcloud

你传的是指针的一个copy,要传指针的地址,然后在add函数内赋值给地址处存储的值(原指针),像这样:

add(&head, 1);

int add(const Linklist** pHead,int e) 
{
    Linklist* head = *pHead;
    if (head == NULL)
    {
        head = *pHead = (Linklist*)malloc(sizeof(Linklist));
        head->elem = e;
        return 1;
    }
    //...
}

 

zwcloud
zwcloud
回复 @木叶7 : 你要修改的是指针本身而不是指针指向的内容。
木叶7
木叶7
但是指针作为形参不就是传递的不就是地址吗
0
GestureWei
GestureWei
参数传递是复制值
返回顶部
顶部