C++函数传值调用

C++的函数的参数调用是传值方式。

想要改变传值调用,有引用和指针两种方式。其中,引用的实现机理也是通过一个指针,但是具体和指针传值的方式又不一样。具体见:C++中的指针与引用

对于指针传值,其实实际上也是一个值传递,只是这个值是地址。所以在函数中改变*p的值,相应的调用函数的值也会改变。但是最近在做一点数据结构方面的东西,发现总是会出现以下错误。


struct list
{ int value;
   list *next;
}

void ListInsert(int x,list *head)
{
        temp=new list;
        temp->value=x;
        temp->next=0;
        if(head==0)
              head=temp;
         else {
                 head->next=temp;
               }
}



这段代码主要是链表在一个指定的节点后面进行插入。但是这么做的话,如果链表为空,那永远插入不进去节点。

原因是head=temp这一句。在函数里面,其实编译器也是吧head的地址传到了栈里面,地址head只是一个函数的局部变量,这个插入函数改变了head的地址,对于主函数的head是没有影响的。所以,总结来说,函数调用,实际上参数的传递都是值传递。

要解决这个问题,可以return head;

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

posted @ 2015-04-07 20:33  fang92  阅读(312)  评论(0)    收藏  举报