C++中的引用

C++的引用是C语言所没有的特性

就好比,你叫张明,但是你还有个外号叫做小明,实质上张明和小明都是你,而C++中的变量名和引用名指的都是一个东西,

引用只是变量的一个别名!

// C++中的引用与指针.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

int mainB(void)
{
	int a = 100;
	int b = 200;
	//int& rb = 100;//错误	1	error C2440: “初始化”: 无法从“int”转换为“int &”	
	int& rb = a;
	rb = 500; //如果直接复制一个常量值,不会操作内存,100存放在CPU的寄存器中

	cout << " a = " << a <<endl;
	cout << " b = " << b << endl;
	cout << " rb = " << rb << endl;
	cout << " &a =  " << &a << endl;
	cout << "&b = " << &b <<endl;
	cout << "&rb = " << &rb <<endl; 
	//根据结果说明:引用在初始化的时候就已经规定好地址,这里引用rb指向a ,之后不能改变!即 &rb = &a;
	//引用在定义的时候必须做出初始化,否则会报错,这点说明引用比指针更加安全
	//可以直接根据引用名称直接改变引用的值,及其指向的变量的值。
	/*
	 a = 200
	 b = 200
	 rb = 200
	 &a =  001CF7FC
	&b = 001CF7F0
	&rb = 001CF7FC
	请按任意键继续. . .

	*/

	system("pause");
	return 0;
}



int _tmainA(int argc, _TCHAR* argv[])
{

	/*
	a = 100
	ra = 100
	&a = 003EFB34
	&ra = 003EFB34
	*/
	//可以看出,引用ra就是a的一个别名,它们的地址相同,但是使用引用可以直接改变变量的值

	int a = 100;
	int & ra = a;
	cout << "a = " << a << endl;
	cout << "ra = " << ra << endl;
	cout << "&a = " << &a <<endl;
	cout << "&ra = " << &ra << endl;

	system("pause");
	return 0;
}



再来观察一下引用用于改变值:

// 2013-11-02.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void change_1(int x) //此处 a 与 x是两个变量,故而不能改变a的值
{
	x = 99;
}

void change_2(int& x)//这里将b 赋值给引用x,意味着为b取了个别名叫x,改变x的值就是改变b的值
{
	x = 99;
}

void change_3(int* x)//此处将c的地址传给x,实质上是让x指向了c,改变*x即是改变了c的值
{
	*x = 99;
}

int _tmain(int argc, _TCHAR* argv[])
{

	int a = 5;
	int b = 5;
	int c = 5;
	change_1(a);
	change_2(b);
	change_3(&c);
	cout <<"change_1() :" << a <<endl;
	cout <<"change_2() :" << b <<endl;
	cout <<"change_3() :" << c <<endl;
	system("pause");
	return 0;
}


结果:

change_1() :5
change_2() :99
change_3() :99
请按任意键继续. . .



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值