C++引入了引用这个类型,引用实际是给变量起了一个别名,实际上,引用只是别名没有独立的内存空间,和它所引用的变量共享内存空间。
变量的属性有两种:名称和空间。
而引用只有名称没有独立的空间。
对引用的改变就是对它所引用的变量的改变。
格式:int a = 1; int& b = a;
Δ定义引用时一定要初始化,指明该引用变量是谁的别名。
Δ引用一经初始化不能重新指向其他变量。
实际引用中,引用一般用作参数传递与返回值。
- # include <iostream>
- using namespace std;
-
- int main(void)
- {
- int val = 100;
-
- int& refval = val;
-
- cout<< "val = " << val << endl;
- refval = 200;
- cout << "refval = " << refval << endl;
-
- int val2 = 500;
- refval = val2 ;
-
- cout << "val2 = " << val2 << endl;
-
- return 0;
- }
运行结果:

const引用,指向const对象的引用
const int ival = 1024; const int& refval = ival;
Δ普通变量引用const变量是非法的
const int ival = 1024; int& refval = ival ; //error
Δconst变量引用普通变量是合法的。
- # include<iostream>
- using namespace std;
-
- int main(void)
- {
- const int val = 1024;
- const int& refval = val;
-
- cout<<"refval = " << val << endl;
-
- int val2 = 1024;
- const int& ref3 = val2;
-
- cout << "ref3 = " << ref3 << endl;
-
- double val3 = 3.4;
-
- const int& ref4 = val3;
- cout << "val3 = " << val3 << endl;
- cout << "ref4 = " << ref4 << endl;
-
-
-
- return 0;
- }
运行结果:

引用做函数参数传递:
-
-
-
-
-
-
-
-
-
-
-
- # include <iostream>
- using namespace std;
-
- void swap(int &x, int &y);
-
- int main(void)
- {
- int a = 5;
- int b = 6;
- cout<<"交换前" << "a = " << a <<" b = " << b << endl;
- swap(a,b);
- cout<<"交换后" << "a = " << a <<" b = " << b << endl;
-
- return 0;
- }
- void swap(int &x, int &y)
- {
- int temp = x;
- x = y;
- y = temp;
- }
运行结果:

下面总结下引用于指针的区别:
引用访问一个变量是直接访问,
指针是间接访问
引用只是别名,本身不分配内存空间
指针本身就是一个变量,有自己的内存空间
引用一经初始化就不能再引用其他变量,
指针初始化后引用其他变量,除非const
值传递的时候,实参要初始化形参,就好分配一个形参变量,将实参内容拷贝到形参
如果是类传递的话,还要调用拷贝函数
指针传递 实参初始化形参的时候也是要分配空间的,
引用传递 实参初始化形参时不分配空间,效率会高点
指针传递 本质还是值传递,如果要修改指针的地址,单纯用指针传递也不能的
仅仅修改指针指向的内容,**,指针引用*&
引用作为函数返回值:
-
-
- # include <iostream>
- using namespace std;
-
- int a[] = {0,1,2,3,4};
-
- int& index(int i)
- {
- return a[i];
-
-
- }
-
- int main(void)
- {
- index(3) = 100;
- 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(void)
- {
- int n = add(3,4);
-
-
-
- int& n2 = add(5,6);
-
- cout << "n = " << n << endl;
- cout << "n2 =" << n2 << endl;
-
- return 0;
- }
运行结果:
