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++标准让去摸索去,但是又有大神说标准不是所有人都遵守,这就尴尬了,未果

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中有多种方式可以传递参数,包括传值引用引用指针。它们之间有一些区别和适用场景。 1. 传值(pass by value):将参数的副本传递给函数。在函数内对参数的修改不会影响到原始值。 ```cpp void func(int num) { num = 10; // 对参数进行修改 } int main() { int num = 5; func(num); // 传值调用 cout << num; // 输出原始值5 return 0; } ``` 传值适用于需要在函数内部进行修改,但不希望影响到原始值的情况。 2. 引用(pass by reference):通过引用传递参数,函数内对参数的修改会直接影响到原始值。 ```cpp void func(int &num) { num = 10; // 对参数进行修改 } int main() { int num = 5; func(num); // 引用调用 cout << num; // 输出修改后的值10 return 0; } ``` 引用适用于需要在函数内部修改参数,并且希望这些修改对原始值产生影响的情况。 3. 引用(pass by const reference):通过常引用传递参数,函数内不能对参数进行修改。 ```cpp void func(const int &num) { // num = 10; // 错误,不能修改常引用参数 } int main() { int num = 5; func(num); // 引用调用 cout << num; // 输出原始值5 return 0; } ``` 引用适用于需要在函数内部对参数进行只读操作,不希望对原始值产生任何修改的情况。 4. 指针(pass by pointer):通过指针传递参数,可以在函数内对参数进行修改,并且可以传递指针。 ```cpp void func(int *ptr) { *ptr = 10; // 对参数进行修改 } int main() { int num = 5; func(&num); // 指针调用 cout << num; // 输出修改后的值10 return 0; } ``` 指针适用于需要在函数内部对参数进行修改,并且可能需要传递空值的情况。 总结: - 传值:适用于不需要对原始值产生影响的情况。 - 引用:适用于需要在函数内部对参数进行修改,并且希望这些修改对原始值产生影响的情况。 - 引用:适用于需要在函数内部对参数进行只读操作,不希望对原始值产生任何修改的情况。 - 指针:适用于需要在函数内部对参数进行修改,并且可能需要传递空值的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值