c++中的引用

来源:互联网 发布:正规购买淘宝小号平台 编辑:程序博客网 时间:2024/06/05 22:49

1.什么是引用?

--引用是变量的一个别名,通过这个别名和原来的名字都可以找到这份数据。一个人的名字和绰号,表示同一个人。

(1)引用和变量

格式:<类型>  &name =  data;

注意:引用必须在定义的时候同时初始化,后面不能再引用其他数据,类似于const;

例:

#include <iostream>using namespace std;int main(){    int a = 99;    int &b = a;        cout<<a<<","<<b<<endl;    cout<<&a<<","<<&b<<endl;    return 0;}
引用在定义的时候加&,使用的时候不用,加&表示地址。不希望引用修改数据,就在前面加const;(常引用)
格式:const <类型>  &name =  data;或<类型> const  &name =  data;
(2)引用作为函数参数
用引用作为形参,调用时形参和实参就绑定在一起,指向同一份数据,如同C中的地址传递。修改形参,实参也改变,不会出现C中数值传递的时候实参不改变。
例:
#include <iostream>using namespace std;void swap1(int a, int b);void swap2(int *p1, int *p2);void swap3(int &a, int &b);int main(){    int num1, num2;    cout<<"Input two integers: ";    cin>>num1>>num2;    swap1(num1, num2);    cout<<num1<<" "<<num2<<endl;       cout<<"Input two integers: ";    cin>>num1>>num2;    swap2(&num1, &num2);    cout<<num1<<" "<<num2<<endl;       cout<<"Input two integers: ";    cin>>num1>>num2;    swap3(num1, num2);    cout<<num1<<" "<<num2<<endl;    return 0;}
//直接传递参数内容void swap1(int a, int b){    int temp = a;    a = b;    b = temp;}//传递指针void swap2(int *p1, int *p2){    int temp = *p1;    *p1 = *p2;    *p2 = temp;}//按引用传参  a,b分别绑定num1,num2了void swap3(int &a, int &b){    int temp = a;    a = b;    b = temp;} (3)引用作为函数返回值#include <iostream>using namespace std;int &sum(int &num){    num = num +1;    return num;}int main(){    int n = 20;    int m = sum(n);    cout<<m<<endl;    return  0;}注意:不能返回局部变量的引用;例:#include <iostream>using namespace std;int &plus10(int &n){    int m = n + 10;    return m;  //返回局部数据的引用}int main(){    int num1 = 10;    int num2 = plus10(num1);    cout<<num2<<endl;    int &num3 = plus10(num1);    int &num4 = plus10(num3);    cout<<num3<<" "<<num4<<endl;    return 0;}2、引用的本质,和指针的区别引用只是对指针进行了封装,底层还是通过指针实现的。3、引用必须在定义时初始化,从一而终,不能指向其他数据;指针没这个限制,不一定赋值,也能指向任意数据。4、可以有const指针,但是没有const引用; int a = 20;int & const r = a;const int *const ptr ;多此一举5、指针可以有多级:int **p;但引用int &&p是错误的;可以如下:int a = 10;int &r = a;int &rr = r;6、指针和引用的自增++,自减--表示不一样。指针表示指向的地址发生改变,指向下一个单元;引用表示指向的值改变;  int a=3  int*ptr=&a;  ptr++;  ptr--;  0x100000000;    int a = 3;  int &b= a;  b++;  b--;        #include <iostream>using namespace std;int main (){    int a = 10;    int &r = a;    r++;    cout<<r<<endl;       int arr[2] = { 27, 84 };    int *p = arr;    p++;    cout<<*p<<endl;    return 0;}


原创粉丝点击