9.C++引入了“引用类型”,占据一个独立的内存块,即一个变量是另一个变量的别名。
例子:
#include <iostream>
using namespace std;
int main(){
double a = 3.1415927;
double &b = a; //&不是c语言的取地址,这里指的b是引用变量,b是a的别名,b就是a
b = 14; //a的内存块值为14
cout << "a contains:" << a << end1; //输出14
}
注意:引用经常用作函数的形参,表示形参和实参实际上是同一个对象,也就是说在函数中对形参的修改也就是对实参的修改。
例1(不能够起到引用的作用):
#include<iostream>
using namespace std;
void swap(int x,int y) {
cout << "swap函数内交换前:" << x << " " << y << endl;
int t = x; X = y; y = t;
cout<< "swap函数内交换后:" << x << " " << y << endl;
}
int main(){
int a = 3, b = 4;
swap(a,b); //调用swap()函数,这里的a就是x,b就是y,x和y的值是独立的
cout << a << "," << b << endl; //结果是3,4
return 0;
}
例2:
/*
x,y得到2个int型变量的指针,x, y本身没有修改修改的是x, y指向的那2个int型变量的内容
*/
void swap(int *x, int *y){ //这里x和y表示的是整型变量的地址
cout << "swap函数内交换前:" << *x << " " << *y << endl;
int t = *x; *x= *y; *y= t; //这里是对a和b的指针变量进行了修改
cout << "swap函数内交换后:" << *x << " " << *y << endl;
}
int main(){
int a = 3,b = 4;
swap(&a,&b); //&a赋值给x,&b赋值给y,这里的x, y分别是int*指针,指向a, b,*x和*y就是a和b
cout << a << "," << b << endl; //输出4,3
return 0;
}
注意:修改两个变量一定要把变量的地址传递给函数,然后这个函数通过取地址符访问到变量。
例3:
//x, y是实参的引用
void swap(int &x, int &y){
cout << "swap函数内交换前:" << & <<" "<< y << endl;
int t = X; x = y; y = t;
cout << "swap函数内交换后:"<< x <<" "<< y << endl;
int main(){
int a = 3, b = 4;
swap(a,b);//x, y分别是a, b的引用,即x就是a, y就是b
cout << a << "," << b << endl; //4,3
return 0;
}
这里是不需要将一个内存拷贝到另一个内存。
引用的作用:当实参栈占据内存大时,用引用代替普通的传值(需要复制)可提高效率,如果不希望因此无意中修改实参,可以用const修改符(const表示不可修改的常量)。
例子:
#include <iostream>
using namespace std;
void change(double &x,const double &y, double z){
x = 100;
y =200;//这里是错误的,y不可修改,因为是const double &
z= 300;
int main(){
double a, b, c;//内在类型变量未提供初始化式,默认初始化为0
chanae(a h c);
cout << a << "," << b << "," << c << endl; //程序会报错,因为修改了常量的值
return 0;
}