设为首页 加入收藏

TOP

C++函数间数据传递方式
2012-11-01 15:45:00 来源: 作者: 【 】 浏览:296
Tags:函数 数据 传递 方式

    三种:传值,传址,引用。

    我先前的一片博文没写清楚,现在比以前更清楚了。

    效果:传值不改变外部对象,传址和引用改变外部对象。

    相比C,引用是新加的。

    引用和传址其实一回事,最终的效果,就是函数使用地址改变了外部对象。 引用通过变量名和取址符(&)完成,传址通过指针完成。

    举《think in c++》的例子吧。

    example1, PassByvalue.cpp

    #include <iostream>

    using namespace std;

    void f(int a) {

    cout《"a= "《a《endl;

    a=5;

    cout《"a= "《a《endl;

    }

    int main () {

    int x=47;

    cout《"x= "《x《endl;

    f(x);

    cout《"x= "《x《endl;

    }

    example2, PassByAddress.cpp

    #include <iostream>

    using namespace std;

    void f (int * p){

    cout《"p= "《p《endl;

    cout《"*p= "《*p《endl;

    *p=5;

    cout《"p= "《p《endl;

    }

    int main() {

    int x =47;

    cout《"x= "《x《endl;

    cout《"&x= "《&x《endl;

    f(&x);

    cout 《"x= "《x《endl;

    }

    example3. PassReference.cpp

    #include <iostream>

    using namespace std;

    void f(int & r) {

    cout 《 "r= "《r《endl;

    cout 《"&r= "《&r《endl;

    r=5;

    cout《"r= "《r《endl;

    }

    int main() {

    int x=47;

    cout 《 "x= "《x《endl;

    cout《"&x= "《&x《endl;

    f(x);

    cout《"x= "《x《endl;

    }

    接口

    void f(int a)

    f(x);

    函数参数只要求传入的是int型的变量。

    函数调用时,只用到变量名本身。

    void f (int * p)

    f(&x);

    函数参数表明是一个int型的指针。

    函数调用时,所以使用了取址符(&)。指针是存地址的变量,换句话,指针就是地址。所以需要加上取址符。这也是为什么叫做传址。

    &x,就是将x的地址传给函数,而不是x自己。

    --------------------------

    void f(int & r)

    f(x);

    跟传值的形式类似。但是函数f的参数类型不一样,使用了int&表示传入的变量将以引用的方式处理。也就是说,相当于引用了变量x的地址到函数里,在本函数内的操作,仍然使用变量名x操作,只不过将会影响到变量本身。

    总结

    想不改变对象本身,请使用传值的方式。

    想修改对象,请将地址传入。可以用传址(指针实现),也可以使用引用(在函数参数中,用取址符(&)表明是引用)。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++虚函数的作用 下一篇C/C++函数调用的几种方式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: