c++基础学习:关于引用以及交换两个变量的值

引用的声明

引用是将已定义变量起别名  用法一样
typedef 给类型起别名

#include <iostream>
using namespace std;

int main()
{
	//变量起别名
	int a = 12;
	int& c = a;//声明变量的一个引用c,c是变量a的一个别名 &为引用符号
	int& d = a;//引用声明的时候必须初始化

	cout << &a << ' ' << &c << ' ' << &d << endl;
	
	int& e = c;
	
	c = 13;
	cout << a << endl;
	system("pause");
	return 0;
}

其他类型的引用

1、基本数据类型: int b = 12;  int &c = b; int &d = b; 

      定义时就要初始化

      不能再指向其他的

2、常量的引用

const int &n = 12;
const char &c = 'a';
const float &f = 123.123f;

3、复合数据类型的引用

数组的引用     方式同数组指针一样

 int a[2];
int (&b)[2] = a;
int a[2][3];
int (&c)[2][3] = a;

结构体的引用         类型 & 名字 = 结构体实例;

指针的引用
int* p = NULL;
int* (&d) = p;
     

引用做参数

fun:首先b的值初始化为12,指向一块空间,然后作为实参传入fun函数中,用b给a初始化,所以a的值也为12
fun1 : a, b各自指向一块空间,然后b的值初始化a
fun2;b指向一块地址0x10,值为12.a也指向一块地址,现b的地址0x10初始化a,然后*a的操作,就指向了b的地址
那么,有个问题:既然fun和fun2都是操作一块空间b,那有什么不同呢?
引用做参数是直接操作b空间,指针做参数是间接操作,也就是先操作地址,这样比较麻烦,也比较慢

 

#include <iostream>
using namespace std;
//引用做参数
void fun(int& a)//引用
{
	a = 13;
	//cout << a << endl;
}

void fun1(int a)//形参
{
	a = 14;
	//cout << a << endl;
}

void fun2(int* a)//指针
{
	*a = 15;
}
int main()
{
	int b = 12;
	//fun(b);
	
	/*fun1(b);*/
	fun2(&b);
	cout << b << endl;
	system("pause");
	return 0;
}

引用做返回值

不要引用局部变量  引用局部变量完毕后会立即释放掉,在操作空间就是非法空间  会有警报,有正常值
指针与引用的区别
1、引用需要初始化,而指针不需要
2、p = &a; 引用初始化之后就不能引用其他空间了,指针可以指向其他空间
3、引用不占用空间,而指针需要(4字节)
4、引用直接操作空间,效率更高
5、引用更安全,指针操作会发生偏移,而引用只是发生内存运算,不改变地址
6、指针更灵活,c\c++均可

&三种作用
1、引用 声明变量的时候有效
2、&变量,表示取地址
3、%数字,表述位与运算

#include <iostream>
using namespace std;


int& fun() //类型  
{
	int a = 12;
	return a;
}
int main()
{
	int& b = fun();
	cout << b << endl;///操作非法空间

	system("pause");
	return  0;
}

交换两个变量的值

ExChange:首先,a对应一块地址,值为13,b为15,然后a,b作为实参传递给形参 a1,b1然后根据函数内部交换值
ExChange2: 首先,a对应一块地址,值为13,b为15,ab的值传递给 a1,b1,其初始化为13,15,内部a1,b1交换,而ab没变

#include <iostream>
using namespace std;


void ExChange(int& a1, int& b1)//引用,只不过是多个变量
{
	int ntemp = a1;
	a1 = b1;
	b1 = ntemp;
}

void ExChange2(int a1, int b1)//形参
{
	int ntemp = a1;
	a1 = b1;
	b1 = ntemp;
}
int main()
{
	int a = 13;
	int b = 15;
	
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	
	//ExChange(a, b);
	ExChange2(a, b);//不能交换
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	
	system("pause");
	return 0;
}
//由于和上面需要写的一样,此处就没有添加指针类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值