传值调用和引用调用

传值调用和引用调用是函数参数传递的两种方式。

1. **传值调用:**
   - 在传值调用中,函数的参数是被传递值的副本。
   - 当函数被调用时,实际参数的值被复制到形式参数中。在函数内部,对形式参数的任何修改都不会影响到实际参数。
 

 - 传递基本数据类型(如整数、浮点数等)时,通常使用传值调用。

   

void square(int num) {
    num = num * num;
}

int main() {
    int x = 5;
    square(x);
    // x 不受 square 函数的影响,仍然是 5
    return 0;
}
#include "iostream.h"
void swap(int a, int b)
{  int temp;
   temp=a;
   a=b;
   b=temp;
}

main()
{  int x=5, y=10;
   cout<<"before x="<<x<<" y="<<y<<endl;
   swap(x,y);
   cout<<"after x="<<x<<" y="<<y<<endl;
}


2. **引用调用:**

引用:给对象取一个别名,主要用于: 独立引用 作为参数传递


   - 在引用调用中,函数的参数是实际参数的引用。
   - 当函数被调用时,形式参数的引用被绑定到实际参数,对形式参数的修改会直接影响到实际参数。
   - 传递大型数据结构或对象时,使用引用调用可以避免复制整个对象,提高效率。

   独立引用:

一般形式:基类型     &引用名 = 标识符; 为“标识符”所代表的变量声明一个叫“引用名”的别名

void addTen(int &num) {
    num += 10;
}

int main() {
    int y = 7;
    addTen(y);
    // y 的值变为 17,因为 addTen 函数中引用了 y
    return 0;
}
#include "iostream.h"
void swap(int& a, int& b)
{  int temp;
   temp=a;
   a=b;
   b=temp;
}

main()
{  int x=5, y=10;
   cout<<"before x="<<x<<" y="<<y<<endl;
   swap(x,y);
   cout<<"after x="<<x<<" y="<<y<<endl;
}

总的来说,传值调用适用于基本数据类型,而引用调用适用于需要修改实际参数或者避免复制大型对象的情况.


代码验证

#include<iostream>
using namespace std;
void f(int& x, int y)
{
	x = x + y;   y = x % y;
	cout << x << '\t' << y << endl;
}
void main()
{
	int x, y;
	x = 1; y = 2;
	f(x, y); cout << x << '\t' << y << '\t' << endl;
	f(y, x); cout << x << '\t' << y << '\t' << endl;
}

分析:初始时x=1 y=2

x=1+2=3;y=3%2=1 但y是传值调用 不改变原y的值

所以第二行x=3 y=2;

第二次调用y是引用传递 会改变y的值

y=2+3=5;x=5%3=2

第四行输出x的原值3 y的引用改变值5

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值