引用的声明: 数据类型 & 引用名 = 初始值(初始值为变量名)
C++中引用就是起别名的意思,声明一个引用并非定义一个新的变量。编译器会给他分配内存空间,所以引用自己占据内存空间,可是引用表现给用户看到的并非引用自身的地址。
//以下程序函数
int ee = 100; int ff = 200; int &aa = ee; int &bb = ff; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; cout << "aa地址" << &aa << " aa值" << aa << endl; cout << "bb地址" << &bb << " bb值" << bb << endl;
从中能够看到,引用的地址跟变量是同样,可是在真实内存中,引用与变量是分开存放的,对引用的操做有点相似与指针,但又不彻底同样。
当引用做为函数的参数时,有以下特色:
一、在进行实参和形参结合时,不会为形参分配内存空间,而是将形参做为实参的一个别名。使用引用传递函数参数时,内存中并无产生实参的副本,他是直接对实参进行操做(相似指针);而使用通常变量传递函数参数时,当发生函数调用时,须要给形参分配存储单元,形参变量是实参变量的副本。所以,当参数传递的数据较大时,用引用比用通常变量传递参数的效率高,且占用空间小。
二、用引用能达到指针传递同样的效果,函数内对形参的操做至关与直接对实参的操做;
//引用做为形参spa
void swap(int & a, int &b) { int map = a; a = b; b = map; cout << "a地址" << &a << " a值" << a << endl; cout << "b地址" << &b << " b值" << b << endl; } int main(void) { int ee = 100; int ff = 200; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; swap(ee, ff); cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; return 0; }
//对比指针指针
void swap(int * a, int *b) { int map = *a; *a = *b; *b = map; cout << "a地址" << &a << " a值" << a << endl; cout << "b地址" << &b << " b值" << b << endl; } int main(void) { int ee = 100; int ff = 200; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; swap(&ee,&ff); cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; return 0; }
从中能够看出指针和引用的类似与区别。
//函数参数为通常变量;code
void swap(int a, int b) { int map = a; a = b; b = map; cout << "a地址" << &a << " a值" << a << endl; cout << "b地址" << &b << " b值" << b << endl; } int main(void) { int ee = 100; int ff = 200; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; swap(ee,ff); cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; return 0; }
经过对比能够发现利用指针和引用的优点。
引用一样能够运用在函数返回
//函数返回引用类型blog
int& fun(int & num) { return num; } int main(void) { int aa, bb; aa = fun(bb); cout << aa << " " << bb << endl; return 0; }
//函数返回指针类型ip
int* fun(int * num) { return num; } int main(void) { int aa, bb; aa = *fun(&bb); cout << aa << " " << bb << endl; return 0; }
----------------------结束语---------------------------内存
因此之后写程序优先考虑用引用,其次是指针,最后通常变量。