C++传值&传指针&传引用

我同学看见我的电脑都说我浏览器开太多了,忍不住要帮我关掉,但是宝宝一个窗口是写博客,一个窗口写javascript,一个窗口写算法,虽然每个都开了十几个,但是条理很清晰啊,没毛病!


C++传参数的三种方式:

传值、传指针、传引用

日常是按需传参数的值或者指针的,某次上课看我们老师写C++函数都是直接传引用的,感觉是个好方法啊,一试之下名不虚传,果然是个有追求的老师!

举个例子一个简单常用的swap()函数:

int a = 1, b = 2;
int x = 10, y = 20;
int m = 100, n = 200;

//传指针方式调用
swap1(&a, &b); 
cout << a << " " << b <<endl; // a = 2,b = 1

//传地址方法调用
swap2(x, y);
cout << x << " " << y << endl; // x = 20,y = 10

//传值方式调用
swap3(m, n);
cout << m << " " << n << endl; // m = 100,n = 200没有交换

//传指针
void swap1(int *a, int *b){
    int t;
    t = *a;
    *a = *b;
    *b = t;
}

//传引用
void swap2(int &x, int &y){
    int t;
    t = x;
    x = y;
    y = t;
}

//传值
void swap3(int m, int n){
    int t;
    t = m;
    m = n;
    n = t;
}
  1. 传值的方式没有交换的原因:
    采用值传递的方式,传入的实参实际上是m和n的副本而非其本身,所以对副本的改变并不会反应到m和n本身上。

  2. 传引用和传指针比较之下:

    • 表面上:

      • 传引用的方式比传指针的方式调用简单,参数传入后使用简单。
    • 实际上:

      • 引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
      • 不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
      • 一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

总结:在我看来传引用就是传地址,当然没有指针那么的灵活,因为指针可以改变指向的地址。

PS:传引用就是传地址是我自己的理解,网上说法千奇百怪,问了几个大神,大神们甩来C++标准让去摸索去,但是又有大神说标准不是所有人都遵守,这就尴尬了,未果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值