- 某个变量的引用,等价于这个变量,相当于这个变量的别名。 变量名 & 引用名=某变量名;
定义引用时一定要将其初始化成引用某个变量。引用只能引用变量,不能引用常量和表达式。
初始化后,它就一直引用该变量,不会再引用别的变量了。
double a=4,b=5;
double &r1=a;//r1引用a
double &r2=r1;//r2也引用a
r2=10;
cout<<a<<endl;//输出10
r1=b; //r1并没有引用b,只是对r1的赋值
cout<<a<<endl;//输出5
case1:使用C++交换两个变量的值与使用C语言实现两个变量值的交换
形式参数:在定义函数名和函数体的时候使用的参数,目的是用于接收调用该函数时传递的参数。实现主调函数与被调函数之间的联系。
实际参数:在调用时传递该函数的参数。可以时常量、变量、表达式。
//C语言
void swap(int a,int b)
{
int temp;
a=temp;
temp=b;
b=a;
}
int n1,n2;
swap(n1,n2);//a,b是形式参数,n1,n2是实参。形参的修改不会对实参造成影响!!
//所以以上述方式调用swap函数并不会使n1,n2的值交换
-----------------------正确的C语言交换形式-----------------------
void swap(int* a,int* b)
{
int temp;
temp=*b;
*b=*a;
*a=temp;
}
int n1,n2;
swap(&n1,&n2);
--在C语言中参数传递分为按值传递和按地址传递。
--按值传递不能改变实参。实参是变量、表达式等数值。因为函数调用时,实参和形参存在于内存中两块不同区域,实参先自己复制一份拷贝,再将拷贝传给形参。由于传递的是拷贝,所以实参不会受形参的影响,实参的值不会被改变。
--按地址传递可以改变实参。实参是指针。函数调用时,将指针传入,此时形参和实参的指针都一样,对形参的任何操作等于对实参的操作。实参的值能够被改变。
//C++
void swap(int& a,int& b){
int temp;
temp=a;
a=b;
b=temp;
}
int n1,n2;
swap(n1,n2);//实现了n1,n1的值的交换
--在C++中用引用代替指针的按值传递以及按地址传递。
--const引用传递(不能改变实参),类比C的按值传递,但由于引用是不用拷贝实参,效率更高。const决定了不能改变实参
--按引用传递(可以改变实参),类别C的按地址传递,可以改变实参。
------实际应用:(1)f(int X) ---C语言用法,实参是变量、数值,就不变;实参是指针就可以改变
(2)f(int& X ) ---C++用法,实参可以被改变
(3)f(const int& X)---C++用法,实参不被改变
不能通过常引用去修改其引用的变量的值!
int n=100;
const int& r=n;
r=12;//编译出错
n=19;//正确
令T是一种类型名
const T &和 T &是不同的类型!!