C++ 引用

int& r = i  VS  int r = i

内存的分配不同,后者会重新开辟一个内存空间。

#include <iostream>
 
using namespace std;
 
int main ()
{
   int i;
   int& r = i;
   i = 5;
   cout << "Value of i : " << i << endl;
   cout << "Value of i reference : " << r  << endl;
   cout << "Addr of i: " << &i << endl;
   cout << "Addr of r: " << &r << endl;
   
   int x;
   int y = x;
   x = 6;
   cout << "Value of x : " << x << endl;
   cout << "Value of y : " << y  << endl;
   cout << "Addr of x: " << &x << endl;
   cout << "Addr of y: " << &y << endl;
 
   return 0;
}
输出结果:

Value of i : 5
Value of i reference : 5
Addr of i: 0x7fff59cda988
Addr of r: 0x7fff59cda988
Value of x : 6
Value of y : 32767
Addr of x: 0x7fff59cda97c
Addr of y: 0x7fff59cda978

必须在声明中将其初始化

int i;

int &b=i;// 相当于给i重新取了一个外号

#include <iostream>

using namespace std;

int main()
{
  int rats = 100;
  int &rodent = rats;

  cout << "rats = "<<rats<<", rosent = "<<rodent<<endl;
  cout << "rats address = "<<&rats<<endl;
  cout << "rosent address = "<<&rodent<<endl;

  cout <<"==================================="<<endl;
  int bunnies = 50;
  rodent = bunnies;

  cout << "rats = "<<rats<<", rosent = "<<rodent<<", bunnies = "<<bunnies<<endl;
  cout << "rats address = "<<&rats<<endl;
  cout << "rosent address = "<<&rodent<<endl;
  cout << "bunniess address = "<<&bunnies<<endl;

  return 0;
}
输出结果:

rats = 100, rosent = 100
rats address = 0xbfce21e4
rosent address = 0xbfce21e4
===================================
rats = 50, rosent = 50, bunnies = 50
rats address = 0xbfce21e4
rosent address = 0xbfce21e4
bunniess address = 0xbfce21e8

从结果可以看出,虽然在调用 rodent = bunnies; 后引用 rosent 的值变为 50,但是 rosent 所指向的地址空间还是指向了 rats,没有发生改变,说明 rodent = bunnies; 只是将 bunnies 的值赋值给引用 rodent 所指向的变量,没有改变引用的指向。

定义一个指针的引用

int *&q = p; //定义一个指针的引用,即q为p的别名。 定义方法:类型 *&指针引用名 = 指针

引用的实际应用

//将两个值进行交换

//使用指针的方法
void fun( int *a,int *b) //形参为两个整型的指针变量
{
    int temp = 0;    //定义一个临时变量。良好的习惯是定义一个变量并初始化它;
    c = *a;    //将*a赋值给c;
    *a = *b;    //将*b赋值给*a;
    *b = c;    //再将c赋值给*b;这样就完成了a、b数值的交换
}
 
int x = 10,y = 20;
fun(&x,&y); //在主函数中调用时,传过去的实参需要写成 取地址a,取地址b,比较麻烦,也不易理 
            //解。

//使用引用的方法
void fun (int &a, int &b)    //形参为两个整型的引用
{
    int temp = 0;
    c = a;
    a = b;
    b = c;
}
 
int x = 10,y = 20;
fun(x,y);    //在主函数中调用时,实参传过去后a是x的别名,b是y的别名。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值