引用

来源:互联网 发布:数据统计权威网站 编辑:程序博客网 时间:2024/05/16 10:49

一、引用的用途

1、变量的引用是变量的别名,与变量占用同一段内存空间,引用在定义时需要初始化,不能为空。

在函数内部使用

#include <iostream>#include <stdlib.h>using namespace std;int main(){int a = 5;int &ra(a);ra = 3;cout << a <<endl;return 0;}

输出3,ra 和 a是一个东西。

2、引用作为参数传递

#include <iostream>#include <stdlib.h>using namespace std;void change(int &a)//新建一个变量接收实参{a = 19;}int main(){int a = 5;change(a);cout << a <<endl;//19return 0;}
3、引用作为返回值
#include <iostream>#include <stdlib.h>using namespace std;int &get(){int a = 10;//栈int &ra = a;return ra;}int main(){int &ra = get();cout<<ra<<endl;//10cout<<ra<<endl;//1529137864,不能返回栈上的东西,但可以返回栈上指向的值return 0;}
二、引用与指针

1、通过引用改变指针的指向

#include <iostream>#include <stdlib.h>using namespace std;int main(){int num1(5),num2(10);int *pnum(&num1);cout<<*pnum<<endl;//5,指向num1的指针int *&rpnum = pnum;//*&顺序不能变rpnum = &num2;cout<<*pnum<<endl;//10 指向num2的指针return 0;}

2、引用改变指针指向的值
#include <iostream>#include <stdlib.h>using namespace std;int main(){int num1(5),num2(10);int *pnum(&num1);cout<<*pnum<<endl;//5int *&rpnum = pnum;*rpnum = 100;cout<<*pnum<<endl;//100return 0;}

三、高级引用

1、引用一维数组

#include <iostream>#include <stdlib.h>using namespace std;int main(){int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int (&ra)[10](a);for(int i = 0; i < 10; i++){cout<< ra[i] <<endl;}return 0;}
2、二维数组的引用

#include <iostream>#include <stdlib.h>using namespace std;int main(){int a[2][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int (&ra)[2][5](a);//二维数组的引用for(int i = 0; i < 2; i++){for(int j = 0; j < 5; j++){cout<<" "<<ra[i][j];}cout<<endl;}return 0;}

3、引用函数指针

#include <iostream>#include <stdlib.h>using namespace std;int jia(int a, int b){return a+b;}int jian(int a, int b){return a-b;}int main(){int (*p)(int a, int b)(jia);//定义一个函数指针cout<<p(1,2)<<endl;//3int (*&rp)(int a, int b)(p);//定义一个函数指针的引用rp = jian;//此处不能用括号,括号仅适用于初始化cout<<p(1,2)<<endl;//-1return 0;}

4、函数指针当做函数的参数

#include <iostream>#include <stdlib.h>using namespace std;int jia(int a, int b){return a+b;}int jian(int a, int b){return a-b;}void change(int (*&rp)(int, int))//函数指针当做函数的参数{rp = jian;}int main(){int (*p)(int a, int b)(jia);//定义一个函数指针cout<<p(1,2)<<endl;//3change(p);cout<<p(1,2)<<endl;//-1return 0;}
5、右值引用作用:节约拷贝内存的时间,是内存优化所必须的。

6、常量的引用

#include <iostream>#include <stdlib.h>using namespace std;int main(){char str[10]("hello");const char(&rstr)[10](str);str[2] = 'y';//可以//rstr[2] = 'y';//不可以,相当于指向常量的指针,只能读,不能写const char(&rrstr)[10](rstr);//可以,引用可以给另一个引用初始化return 0;}

7、限定一个函数指针是常引用

#include <iostream>#include <stdlib.h>using namespace std;int jia(int a, int b){return a+b;}int jian(int a, int b){return a-b;}int main(){int (*p)(int a, int b)(jia);//定义一个函数指针cout<<p(1,2)<<endl;//3int (*const &rp)(int a, int b)(p);//注意const的位置//rp = jian;//不可以return 0;}


0 0
原创粉丝点击