C++笔记(2)引用

引用的作用:给变量起别名

语法:数据类型 &别名 = 原名; 例:int a=10; int &b=a;

如果 int a=10;

        int &b=a;

        b=20;

        cout<<a<<endl;//输出结果为20

引用的注意事项:

1.引用必须初始化           例:int &b;//是错误的

2.引用初始化就不能再做出改变

//如果b已经是a的别名,则不能再作为c的别名

如果写 int &b=a; int &b=c;//是错误的

注意:int a=10; int &b=a; int c=20;b=c;这是正确的,是赋值操作而不是更改引用。输出结果为a=20,b=20,c=20

引用做函数参数

值传递,形参不会修饰实参

地址传递,形参会修饰实参

void swap01(int *a,int *b){

Int temp=*a;

*a=*b;

*b=temp;

}

Void main(){

Int a=10;

Int b=20;

swap01(&a,&b);

}

引用传递,形参会修饰实参

void swap02(int &a,int &b)//这里的a和b是实参的别名,只不过别名与原名相同

{

Int temp=a;

a=b;

b=temp;

}

Int main(){

Int a=10;

Int b=20;

swap02(a,b);

}

引用做函数的返回值

1.不要返回局部变量的引用

Int &test01(){

Int a=10;

Return a;

}//以引用的形式返回a

2.函数的调用可以作为左值

Int &test02(){

Static int a=10;//静态变量,存放在全局区,数据在程序结束后由系统释放

Return a;

}

Int main(){

Int &ref=test01();//可以理解为返回一个新的别名但是未声明,然后用ref作为新的别名来接收

Cout<<"ref="<<endl;//结果正确,输出10,编译器做了保留

Cout<<"ref="<<endl;//a的内存已经释放,输出乱码

Int &ref2=test02();

Cout<<"ref2="<<endl;

Cout<<"ref2="<<endl;//两次输出都是10

test02()=1000;//令a的引用等于1000,相当于对a进行操作,使a=1000

Cout<<"ref2="<<endl;

Cout<<"ref2="<<endl;//ref2是a的别名,所以也可以访问到这块内存

}

引用的本质:在c++内部实现是一个指针常量

C++笔记(2)引用

常量引用(用来修饰形参,防止误操作)

Int a=10;

Int &ref=10;//错误,10位于常量区,引用只能引一块合法的空间,比如栈或者堆区的数据

但是如果用Const int &ref=10;

//是正确的,编译器将代码修改成int temp=10;const int &ref=temp;

引用的是一块临时的空间,但是这个空间无法找到原名去操控,只能用别名ref操纵

ref=20;//错误,加入const以后变为只读,不可修改

如果参数中的int &ref 改为const int &ref,则ref的值不能修改

 

上一篇:C++中map的用法


下一篇:Qt QJson解析json数据