C++值传递、引用传递、指针变量传递参数的比较

时间:2022-04-18 21:30:47
// test1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
using namespace std;

/**
*1.值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值,
*从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,
*不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
*/
void Add(int a)
{
a = a+3;
}

/**
*2.如果函数按引用方式传递,在调用函数中修改了参数的值,其改变是影响到实参
*/
void Add2(int &a)
{
a= a+3;
}

/**
*3.使用指针变量传递参数与引用传递效果一样,当对形参的指向操作时,就相当于对实参本身进行的操作
*/

void Add3(int *a)
{
*a +=3;
}


void main()
{
int a = 5;
Add(a); //值传递不改变实参的值,所以a仍然是5
cout<<"测试值传递结果:"<<a<<endl;

int &b= a;
Add2(b); //引用传递会影响实参,所以结果是8
cout<<"测试值传递结果:"<<a<<endl;

int *c = &a;
Add3(c); //指针传递传递会影响实参,所以结果是11,注释Add2可得结果亦为8
cout<<"测试值传递结果:"<<a<<endl;
}