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
请按任意键继续. . .