#include<iostream>
using namespace std;
//引用作为参数
void changeA(int & a)
{
a+=10;
}
//引用作为返回值,返回变量本身
int & fun()
{
static int d=10;
return d;
}
int main(int argc,char* argv[])
{
/*
引用是为变量起别名;
引用的本质是一个指针常量,所以在声明的时候要直接初始化,且不能修改。
但是可以多次引用给变量起多个别名。
引用作为函数参数时不进行初始化(因为在函数调用时实参给形参的传递过程相当于初始化)
引用的意义:在一些场合可以代替指针,且可读性更好和无需开辟指针空间。
引用作为函数得返回值(返回变量本身,能不能做左值的关键在于函数调用结束后变量是否还存在):
1)若返回栈变量:不能成为其他引用的初始值(可直接赋值给某一变量,但是不能作为一个引用的初始值)
2)若返回静态变量和全局变量,则可以成为其他引用的初始值,同时也可以成为左值(函数当一个变量来用)。
指针引用:当实参为指针变量时,形参可用指针引用格式(TYPE *& name)其余用法与引用做参数相同
const引用:(防止对象被随意修改)
1)若标识符为常量则必须用const 引用
2)const 引用与普通引用最大的区别可用非同类型的常量和变量初始化
3)当使用常量值对const引用初始化时,编译器会分配空间,空间名为引用名
4)变量的值如果变化,const引用的值不会随之改变
*/
int a=10;
int &b=a;//引用的语法:TYPE & name1=name2;
b=14;//通过引用可以改变变量的值
cout<<"a="<<a<<",b="<<b<<endl;
int &c=b;//c也是a的别名
cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;
changeA(a);//做参数
cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;
int &e=fun();//做返回值
cout<<"e="<<e<<",fun()="<<fun()<<endl;
fun()=100;
cout<<"e="<<e<<",fun()="<<fun()<<endl;
const int f=10;
const int &g=f;//const 引用
const double &h=a;//const 引用与普通引用最大的区别可用非同类型的常量和变量初始化
a=10;
cout<<"a="<<a<<",h="<<h<<endl;
system("pause");
return 0;
}