C++函数——参数传递

参数传递

  1. 形参的类型决定了形参和实参的交互方式。

  2. 如果形参是引用类型, 它将绑定到对应的实参上 (传引用参数); 否则, 将实参的值拷贝后赋给形参(传值参数)。

传值参数

    传值参数有2种方式:

  1. 将实参的实际值复制给函数的形参。 在这种情况下,修改函数内的形参对实参没有影响。

  2. 将参数的地址复制给形参(指针)。 因为指针使我们可以见间接地访问它所指的对象, 所以通过指针可以修改它所指对象的值。

#include<iostream>
#include<string>

using namespace std;

int reset(int i);
void reset1(int *pi);

int main()
{
    int num = 10;
    cout << "reset : " << reset(num) << endl;
    cout << "num: " << num << endl;
    cout << "num的地址: " << &num << endl;
    reset1(&num);
    cout << "reset1 : " << num << endl;
    cout << "num的地址: " << &num << endl;
    return 0;
}

//传递实参的实际值,将实参的值拷贝给形参,函数体中修改的是形参的值,对实参不产生影响
int reset(int i)
{
    i *= 2;
    return i;
}

//传递实参的地址,修改*pi的值,就是修改实参指向的对象的值。修改pi的值,是修改的形参存储的地址,不影响实参的地址。
void reset1(int *pi)
{
    *pi *= 2;
    pi = 0;
}

传引用参数

    引用: 引用是已定义的变量的别名。 对于引用的操作实际上是作用在引用所引的对象上的。 它们共用相同的内存空间。

    传引用参数: 通过将引用变量用作参数, 函数将使用原始数据, 而不是其副本。

int n = 0;
int &r = n;(&不再是地址运算符, r是n的引用)

    用途

  • 当某种类型不支持拷贝操作, 或是需要拷贝的对象太大时, 我们可以通过引用形参来访问对象。

  • 当函数需要同时返回多个值时, 可以使用引用形参来处理。

#include<iostream>
#include<string>

using namespace std;
void reset(int &i);
int min(int num1, int num2, int num3, int &max);
int main()
{
    int num = 10;
    reset(num);
    cout << num << endl;

    int maxNum;
    int minNum;
    minNum = min(20, 15, 23, maxNum);
    cout << "最大值为:" << maxNum << endl;
    cout << "最小值为:" << minNum << endl;
    return 0;
}
//将引用变量作为参数,函数使用的是原始数据,而不是副本。
//对形参的修改其实就是对实参的修改。
void reset(int &i)
{
    i = i * 2;
}

//函数的返回值为int类型,返回的是3个数中的最小值
//定义了一个引用类型的参数,通过这个参数修改maxNum的值,获得最大值
int min(int num1, int num2, int num3, int &max)
{
    int temp1, temp2;
    temp1 = num1 < num2 ? num1 : num2;
    temp1 = temp1 < num3 ? temp1 : num3;

    temp2 = num1 > num2 ? num1 : num2;
    temp2 = temp2 > num3 ? temp2 : num3;

    max = temp2;
    return temp1;
}

猜你喜欢

转载自blog.csdn.net/xiaokunzhang/article/details/80977085