C++引用变量的理解

首先引用变量是已定义的变量的别名,引用变量的主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本。这样除了指针,和函数的返回值,都可以对函数外的变量做处理,经过参数传入函数后,修改变量的值后,再做其他处理

创建引用变量

必须在声明引用变量时进行初始化

int a;
int &b=a;

引用变量作为函数的形式参数

#include <math.h>
#include <stdio.h>
#include <iostream>

void swapr(int &a, int &b);
void swapp(int *p, int *q);
void swapv(int a, int b);

int main()
{
using namespace std;
int wallet1 = 300;
int wallet2 = 350;

cout << "wallet1 = $" << wallet1;
cout << "wallet2 = $" << wallet2<<endl;

cout << "使用引用交换变量的值" ;
swapr(wallet1, wallet2); //输入变量
cout << "wallet1 = $" << wallet1;
cout << "wallet2 = $" << wallet2<<endl;

cout << "使用指针去交换内容";
swapp(&wallet1, &wallet2); // 输入变量的地址
/* // 与swapp(&wallet1, &wallet2)效果相同
int *c, *d;
c = &wallet1;
d = &wallet2;
swapp(c, d);
*/
cout << "wallet1= $" << wallet1;
cout << "wallet2 = $" << wallet2 << endl;

cout << "直接输入变量";
swapv(wallet1, wallet2); //输入变量的值
cout << "wallet1= $" << wallet1;
cout << "wallet2 = $" << wallet2 << endl;

return 0;
}

void swapr(int &a, int &b) { //使用引用
int temp;
temp = a;
a = b;
b = temp;
}

void swapp(int *p, int *q) { //使用指针
/*
int *temp;
temp = p;
p = q;
q = temp;
printf("%d", *p);
printf("%d", *q);
*/

int temp;
temp = *p;
*p = *q;
*q = temp;
}

void swapv(int a, int b){
int temp;
temp = a;
a = b;
b = temp;
}

【C++】引用变量_引用变量
可以看到初始wallet1的值为300,wallet2的值为350,通过引用和指针的方式成功改变了变量的值,而直接输入变量的方法没有改变,原因是直接输入变量是创建的变量的副本,没有对变量的本身进行操作

关于函数形式参数补充(当形参为指针类型时)

int main() {
int num[] = {3,2,1,2};
int len = sizeof(num) / sizeof(num[0]);
//传入正确方法1
int a=0;
int *b = &a;
duplicate(num, len, b);
printf("%d", a);

//传入正确方法2
int a = 0;
duplicate(num, len, &a);
printf("%d", a);

//传入错误方法,指针是野指针,还没有分配内存
int *p = NULL;
duplicate(num, len, p);
printf("%d", *p); //无法正常打印指针指向变量地址所存放的值
return 0;
}

bool duplicate(int numbers[], int length, int *duplication) {
*duplication = 1;
}