C/C++ 直接传值,传引用,传指针的理解

来源:互联网 发布:ubuntu 桌面假死 编辑:程序博客网 时间:2024/06/04 00:23

从根本上来讲都是传值,只不过立场不同罢了。引用和指针传得值是地址而已。

简单的讲,如下.
void swap(int a,int b)//交换函数
{
    a+=b;
    b=a-b;
    a=a-b;
}
这是直接传值..在此函数内部虽然交换了,但是,在主函数中,运行后.两值不交换.
因为此函数内的a,b是主函数中的一份COPY..

void swap(int &a,int &b)//交换函数
{
    a+=b;
    b=a-b;
    a=a-b;
}
可以,因为,加上引用后.函数内的运算,直接作用于这两个变量本身.

void swap(int *a,int *b)//交换函数
{
    *a+=*b;
    *b=*a-*b;
    *a=*a-*b;
}

这样,也可以,传进来的是地址.
操作直接作用于地址指向的空间,也就是它们本身.

直接传值就是传实参的副本给函数,需要时间消耗;而传引用传指针是传实参的地址给函数,
系统开销少,此外,在C中用常用指针,而在C++中常用引用.特别是在面向对象编程中.

引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使用指向指针的指针,或者指针引用。

参考:http://xinklabi.iteye.com/blog/653643


0 0
原创粉丝点击