【C++】引用变量

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;
}

在这里插入图片描述
可以看到初始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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bug 挖掘机

支持洋子

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

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

打赏作者

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

抵扣说明:

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

余额充值