笔记3(从c到c++)引用

引用

引用是给一个变量起别名

定义引用的一般格式:类型 &引用名=变量名;

int a=1;                       int  &b=a;//b是a的别名,因此a和b是同一个单元(注意:定义引用时一定要初始化,指明该引用变量是谁的别名)                             int &b;//error

在实际应用中,引用一般用作参数传递与返回值

变量有名称有空间      引用不是变量 引用仅仅是变量的别名,引用没有自己独立的空间,要与他引用的变量共享空间

对引用所做的改变实际上是对它所引用的变量的改变

引用一经初始化,不能重新指向其他变量。

#include<iostream>
using namespace std;
int main()
{
	int val=100;
	int & refval=val;
	refval=200;
	cout<<"val="<<val<<endl;
	int val2=500;
	refval=val2;//不代表将refval引用至val2这个变量
	                  //仅仅是代表将val2赋值给refval
	cout<<"val="<<val<<endl;
	return 0;
}

const引用

const引用是指向const对象的引用

	const int ival=1024;
	const int& refval=ival;//ok
	int &ref2=ival;//error

const引用可以指向非const对象

double val3=3.14;//这两者的值是不一样的   中间有临时变量的转换
	                            //int temp =val3;
	                            //const int& ref4=temp;
const int& ref4=val3;

int& ref5=val3;//error  非const引用没有中间的变量

按引用传递

引用传递方式是在函数定义时在形参前面加上引用运算符"&"(   swap(int &a,int &b)     )

按值传递方式容易理解,但形参值得改变不能对实参产生影响

地址传递方式通过形参的改变使相应的实参改变,但程序容易产生错误且难以阅读

引用作为参数对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然

#include<iostream>
using namespace std;
void swap(int& x,int& y)
{
	int temp=x;
	x=y;
	y=temp;
}
int main()
{
	int a=5;
	int b=6;
	swap(a,b);//在函数调用时,引用被初始化x=a,y=b
	cout<<"a="<<a<<"b="<<b<<endl;		
	return 0;
}

引用作为返回值

引用的另一个作用是用于返回引用的函数

函数返回引用的一个主要目的是可以将函数放在赋值运算符的左边(注意:不能返回对局部变量的引用)

#include<iostream>
using namespace std;
int a[]={0,1,2,3,4};
int& index(int i)
{
	return a[i];
}
int main()
{
	index(3)=100;//引用作为函数返回值,是的函数可以放在赋值运算符左边
	                     //函数返回引用,引用在函数返回的时候初始化
	                     //index(3)在函数返回的时候被初始化为a[3]
	//&index(3)=a[3];
	cout<<"a[3]="<<a[3]<<endl;
	
	return 0;
}
#include<iostream>//不能返回对局部变量的引用
using namespace std;

int& add(int a,int b)
{
	int sum;
	sum=a+b;
	return sum;
}
int main()
{
	int n=add(3,4);//n的变量的值实实在在存在
	int& n2=add(5,6);//n2是引用,没有自己独立的空间
	                             //n2的值依赖于它所引用的变量
	                             //如果n2所引用的变量的生命期结束,也就是说n2是一个无效的引用
	                             //那么n2的值将是不确定的
	//cout<<"n2="<<n2<<endl;
	cout<<"n="<<n<<endl;
	cout<<"n2="<<n2<<endl;
	
	return 0;
}

引用与指针的区别

引用访问一个变量是直接访问,而指针是间接访问

引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间(对于32位系统,指针是4个字节)

引用一经初始化不能再引用其他变量,而指针可以

c++推荐尽可能使用引用,不得已时使用指针。

 

值传递    实参要初始化形参要分配空间  将实参内容拷贝到形参

引用传递    实参初始化形参时不分配空间 (效率更高)引用使用同一地址空间

指针传递   本质值传递   实参初始化形参的时候也要分配空间,分配的是4字节的空间(32位系统)

指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值