zoukankan      html  css  js  c++  java
  • c++引用与指针的关系

    1.引用的概念及用法

    概念:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
    温馨提示: 引用不是定义一个新的变量
    定义的格式为:
    类型 &引用变量名 = 已定义过的变量名;
    用法:
    举个例子:

     int a = 5;
     int& b = a;
    

    这就是引用,b引用a,b是a的别名。

    2.引用做参数

    我们在C语言中经常用指针做参数:

    Func(int *a) ;
    int main()
    {
    	int arr[1000];
    	Func(arr);
    }
    

    像这种情况我们会用指针作为参数,增加程序运行效率。当然指针由于太灵活,会导致不安全在里面,故此C++*引入了引用类型,他的效果和指针一样其实引用底层就是指针,下面会介绍。
    引用作为参数:

    Func(int& a) ;
    int main()
    {
    	int arr[1000];
    	Func(arr);
    }
    

    引用作为参数很好的规避了指针的风险,同时能达到指针的效果。

    当不希望函数内改变参数x的值时,尽量使用常引用传参.

    void ReadBigData (const bigData& x)//此时不需要在函数内部改变参数的值我们赋予参数常属性
    {
    int a = x. array[100];
    }
    

    3.引用做返回值

    以引用返回函数值,定义函数时需要在函数名前加&

    int ret = 0;//全局变量
    int Add1(int a, int b)
    {
    	ret = a + b;
    	return ret;
    }
    
    int& Add2(int a, int b)//引用做返回值
    {
    	ret = a + b;
    	return ret;
    }
    
    int main( )
    {
    	printf("%d
    ", Add1(5,6));
    	printf("%d
    ", Add2(4,5));
    	return 0;
    }
    

    引用做返回值优点:
    用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

    4.汇编层看引用的特性

    这里写图片描述

    结论:

    1. 不要返回一个临时变量的引用。

    2. 如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效。

    5.引用和指针的区别和联系:

    ▶不同点:

    1. 指针是一个实体,而引用仅是个别名;

    2. 引用使用时无需解引用(*),指针需要解引用;

    3. 引用只能在定义时被初始化一次,之后不可变;指针可变;

    4. 引用没有 const,指针有 const;const修饰的指针不可变;

    5. 引用不能为空,指针可以为空;

    6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

    7. 指针和引用的自增(++)运算意义不一样;

    8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。

    ▶相同点:两者都是地址的概念,指针指向一块儿内存,其内容为所指内存的地址;引用是某块儿内存的别名。

    更多内容请移步专栏:https://blog.csdn.net/column/details/20027.html

  • 相关阅读:
    范畴定义
    泛函编程(0)-什么是泛函编程
    函数式语言的特性
    理解函数式编程
    未阅归档
    monad-本质解释- a monad is a design pattern--monad与泛型相关
    打印管理系统
    函数式JS: 原来promise是这样的monad
    Promise是Monad吗?
    Scala和范畴论 -- 对Monad的一点认识
  • 原文地址:https://www.cnblogs.com/zhonglongbo/p/8651063.html
Copyright © 2011-2022 走看看