C++中的值传递、指针传递和引用传递

        在C++中用三种给函数传递参数的方式,分别是:值传递、指针传递、引用传递。以下就用最简单的swap函数来进行讲解。

一、值传递

#include <iostream>
using namespace std;
int swap(int, int);
int main() {
    int a = 10, b =20;
    cout << "before:a=" << a << endl;
    cout << "before:b=" << b << endl;
    swap(a, b);
    cout << "after:a="  << a << endl;
    cout << "after:b=" << b << endl;
}

int swap(int a, int b) {
    int c;
    c = a;
    a = b;
    b = c;
}

        

从上面代码的运行结果可知,变量a,b的值并没有发生交换,这是为什么呢?

在函数swap调用之前,实参a,b已经有了自己的内存空间并且有各自的值。在swap函数被调用后,为形参分配了各自的空间,并且把main函数中a,b的值复制一份分别复制给形参,在swap函数中进行两值的交换并不会影响到main函数中变量的值。这种传递方式叫做引用传递。

二、指针传递

#include <iostream>
using namespace std;
int swap(int*, int*);
int main() {
    int a = 10, b = 20;
    int* p1 = &a;
    int* p2 = &b;
    cout << "before:a=" << a << endl;
    cout << "before:b=" << b << endl;
    swap(p1, p2);
    cout << "after:a="  << a << endl;
    cout << "after:b=" << b << endl;
}

int swap(int* a, int* b) {
    int c;
    c = *a;
    *a = *b;
    *b = c;
    return 0;
}

 从上面代码可知,a,b变量的值经过swap函数的操作发生了值的交换。

这就是一个最基本的指针引用,将指针作为函数的参数可以让函数对指针指向的变量的值进行操作。具体指针的知识在此不做过多的赘述。

三、引用传递

#include <iostream>
using namespace std;
void swap(int&, int&);
int main() {
    int a = 10;
    int b = 20;
    int &c = a;
    cout << "a:" << &a << endl;
    cout << "c:" << &c << endl;
    cout << "before:a=" << a << endl;
    cout << "before:b=" << b << endl;
    swap(a, b);
    cout << "after:a="  << a << endl;
    cout << "after:b=" << b << endl;
}
void swap(int &a, int &b) {
    int c = a;
    a = b;
    b = c;
}

 从上述代码运行结果可以知道,引用其实就是变量的一个别名,在内存中代表着同一块区域;而且当函数未调用之前,实参a,b的值分别是10和20。在函数调用的过程中,形参的值发生了交换,结束后实参的值被修改。即函数调用时,作为形参的的引用变量并不分配新的内存空间,它将作为实参变量的别名与其公用内存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值