C++中的引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某
一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。
引用的特点:
①一个变量可取多个别名。
②引用必须初始化,只有别名是不能成立的。
③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。
C++ 引用 vs 指针
引用很容易与指针混淆,它们之间有三个主要的不同:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化
1、基础数据类型引用:
#include <iostream> #include <stdio.h> using namespace std; int main(void) { int a=10; int &b=a; // 给a起一个别名b b=20; // 对b操作和对a操作效果是一样的 cout << a <<endl; a=30; cout << b << endl; system("pause"); return 0; }
运行结果:20 30
2、结构体类型的引用
#include <iostream> #include <stdio.h> using namespace std; typedef struct // 定义一个结构体 { int x; int y; }Coord; // 结构体的名字 int main(void) { Coord c; Coord &c1 = c; // 给c起一个别名c1 c1.x = 10; // 对c1操作相当于对c操作 c1.y = 20; cout << c.x << "," << c.y << endl; system("pause"); return 0; }
运行结果:
3、指针类型的引用:
格式:类型 *&指针引用名 = 指针简而言之:给地址起一个别名
#include <iostream> #include <stdio.h> using namespace std; int main(void) { int a = 3; int *p = &a; int *&q = p; cout << p << endl; // P = 0093FC60 cout << &q << endl; // &q = 0093FC54 cout << *&q << endl;//*&q = 0093FC60 *q = 5; cout << a << endl; system("pause"); return 0; }
运行结果:
4、函数参数引用:
以前我们在C语言中交换a,b的位置时:
void fun(int *a,int *b) { int c; c = *a; *a = *b; *b = c; }
调用的时候我们需要吧参数的地址传进去:
int x =10,y = 20; fun(&x,&y);
而当我们引入了引用,事情就方便多了
void fun(int &a,int &b) // 形参就是引用别名 { int c = 0; c = a; a = b; // a和b都是以别名形式进行交换 b = c; }
调用传参
int x =10,y = 20; fun(x,y);
代码示例:
#include <iostream> #include <stdio.h> using namespace std; void fun(int &a,int &b) int main(void) { int x =10; int y =20; cout << x << "," << y << endl; fun(x,y); cout << x << "," << y << endl; system("pause"); return 0; } void fun(int &a,int &b) { int c = 0; c = a; a = b; b = c; }
输出结果: