1、定义声明引用变量
引用变量是在C++中新的复合类型。引用变量被定义为一个变量的别名,即引用变量和其指向的变量代表同一个值,指向同一个存储单元,并且引用变量自从赋值起就已知跟着这个变量,不会再发生改变,也就是一个变量两个名字,所以更改其中的任何一个这个变量都会发生改变。
&
符号可以取变量的地址,同时它的另一个含义就是用来声明引用变量:
int i; int & r = i;
例如,
#include <iostream> using namespace std; int main () { // 声明正常的变量 int i; double d; // 声明引用变量 int& r = i; double& s = d; i = 3; cout << "正常变量i的值 : " << i << endl; cout << "引用变量r的值 : " << r << endl; d = 12.7; cout << "正常变量d的值 : " << d << endl; cout << "引用变量s的值 : " << s << endl; return 0; }
2、引用变量和指针的区别
1)不存在空引用。引用必须连接到一块合法的内存。
2)引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3)引用必须在创建时被初始化。指针可以在任何时间被初始化。
3、引用作为参数
C++引用作为参数传递,直接传入地址,不再开辟新的复制空间,C语言中没有引用,只有指针。
例如,
#include <iostream> using namespace std; int main() { void swap(int & ,int&); int i =3,j = 5; swap(i,j); cout<<"i="<<i<<endl<<"j="<<j<<endl; getchar(); return 0; } void swap(int &a,int &b) { int temp; temp = a; a =b; b= temp; }
4、引用作为返回值
引用作为函数的返回值时,必须在定义函数时在函数名前将&
。用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本。
例如,
#include<iostream> using namespace std; int value[10]; int error=-1; int &func(int n){ if(n>=0&&n<=9) return value[n];//返回的引用所绑定的变量一定是全局变量,不能是函数中定义的局部变量 else return error; } int main(){ func(0)=10; func(4)=12; cout<<value[0]<<endl; cout<<value[4]<<endl; return 0; }