传值传参和引用传参

引用方式传参,引用相当于是外部变量的别名,实际操作的就是该变量,即在函数内对该变量进行修改的话,在外部该变量也会相应被修改。
而传值方式传参,实际上是复制了一个外部变量的副本进入函数中,在函数内操作的为该副本,对该变量的修改并不会实际修改函数外的该变量。
注意,此处未考虑传入的参数为指针的情况,如果传值方式传入的是指针,那么如果单纯修改指针,那么在跳出函数后,该指针指向不受影响,但是如果修改的是指针指向的值,那么外部指针所指向的内容也是相应修改了的。因为以指针为参数进行传值,也是在函数内部复制了一个指针的副本,因而在内部修改指针本身即修改其副本并不影响外部的指针,但是两个指针都是指向同一个内存空间的,因而如果在函数内部修改了指针指向的内容,外部指针指向的内容也就相应改变了。
#include <iostream>
using namespace std;

//测试如果引用进入函数后进行修改,跳出函数后变量是否修改;
void ChangeRef(int& ref);
//测试以传值方式进入函数进行修改,跳出函数后变量是否修改
void ChangeNotRef(int ref);
//测试以指针为参数传入函数,修改指针指向,是否影响外部指针指向
void ChangePtr(int* ptr);
//测试在函数中修改指针指向的内容,是否影响外部指针指向内容
void ChangePtrVal(int* ptr);
int main(int argc, char* argv)
{
    int Ref = 0;
    cout << "传入引用之前的值为:" << Ref << endl;
    ChangeRef(Ref);
    cout << "在函数内修改引用后,跳出函数的值为:" << Ref << endl;
    ChangeNotRef(Ref);
    cout << "通过传值方式在函数内修改后,跳出函数的值为:" << Ref << endl;
    int* ptr = &Ref;
    cout << "传入函数前的指针指向:" << ptr << endl;
    ChangePtr(ptr);
    cout << "传值方式传入函数跳出后的指针指向:" << ptr << endl;
    cout << "传入前指针指向的值为:" << *ptr << endl;
    ChangePtrVal(ptr);
    cout << "从函数中出来后指针指向的值为:" << *ptr << endl;

}

void ChangeRef(int& ref)
{
    ref++;
    cout << "引用内修改后的值为:" << ref << endl;
}

void ChangeNotRef(int ref)
{
    ref++;
    cout << "通过传值方式在函数内修改后的值为:" << ref << endl;
}

void ChangePtr(int* ptr)
{
    ptr++;
    cout << "函数内修改后的指针指向:" << ptr << endl;
}

void ChangePtrVal(int* ptr)
{
    (*ptr)++;
    cout << "函数内修改后指针指向的值:" << *ptr << endl;
}

输出为:这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弹指间LDL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值