引用(普通引用)

引用
引用一个指针& 放在*的右边 
   
   
 void change (myclass *&p)
{
 
}

int &i=j  等价于  int *const i=j;
  
  
int a ;
int &b=a;//引用定义时必须初始化
//此时b就已经建立了对a的引用
引用 的本质上是为了方便程序员间接修改变量的程序编写,不需要使用指针,编译器在内部已经做了。
   
   
void fun(int &b)
{b=20;}
void main()
{
int a =10;
fun(a);//此时a已经改成了20,若是在C语言里面还要取地址,间接赋值,现在就不用了
}
引用很像指针,在定义时,C++编译器也是分配内存的,已一个常量指针类型建立内存
对比间接赋值的三个条件:
1、定义两个变量,一个实参一个形参
2、建立关联,将实参的地址传给形参p
3、*p形参去间接的修改实参的值

引用在实现上,只不过是把间接赋值成立的三个条件的后两个放到了一起
当实参传给形参的时候,只不过是C++编译器帮我们程序员手工取了一个实参地址传给形参引用。

C++引用使用难点:
当函数返回值为引用时
    若返回栈变量,不能成为其他引用的初始值,不能做左值使用;可以成为其他变量的赋值,不是引用类型的。
    若返回静态变量或全局变量,可以成为其他引用的初始值,既可以作为右值,也可以作为左值使用。
   
   
//当返回的是全局变量时,函数外部拿int或者int&都行。
//若返回的是局部变量,则只能用int类型去接
 
int a=100;
int &fun01(int &a)
{
a++;
return a;
}
void main()
{
int d=fun01(a);
cout<<"d:"<<d<<endl;//101
int &e=fun01(a);
cout<<"e:"<<e<<endl;//102
}
返回栈变量
   
   
# define _CRT_SECURE_NO_WARNINGS
 
#include "iostream"
using namespace std;
 
int & get()
{
int a = 10;
int &ra = a;
return ra;
}
 
void main()
{
int b = get();//此时打印的两个b均是正确的,因为当给一个变量赋值时,就直接吧那个变量赋值成10了。
//int &b = get();如果这儿赋值的是引用的话,最后一个输出的b会是乱码,第一个b是正常的,因为此时只是把内存回收了,但是还没有将内存内的值重新赋值
cout << b << endl;
cout << "abcdefg" << endl;;
cout << b << endl;
system("pause");
}


















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值