1.引用的概念及用法

概念:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

温馨提示: 引用不是定义一个新的变量

定义的格式为:

类型 &引用变量名 = 已定义过的变量名;

用法:

举个例子:

  1. int a = 5;
  2. int& b = a;

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

2.引用做参数

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

  1. Func(int *a) ;
  2. int main()
  3. {
  4. int arr[1000];
  5. Func(arr);
  6. }

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

引用作为参数:

  1. Func(int& a) ;
  2. int main()
  3. {
  4. int arr[1000];
  5. Func(arr);
  6. }

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

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

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

3.引用做返回值

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

  1. int ret = 0;//全局变量
  2. int Add1(int a, int b)
  3. {
  4. ret = a + b;
  5. return ret;
  6. }
  7. int& Add2(int a, int b)//引用做返回值
  8. {
  9. ret = a + b;
  10. return ret;
  11. }
  12. int main( )
  13. {
  14. printf("%d\n", Add1(5,6));
  15. printf("%d\n", Add2(4,5));
  16. return 0;
  17. }

引用做返回值优点:

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

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

c++引用与指针的关系的更多相关文章

  1. 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1;  int  &b=a;// b是a的别名,因此a和b是同一个单元 ...

  2. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

  3. nim的引用和指针

    nim语言的引用和其他语言的指针有点相似 可以提供一种“多对一”的关系 这就意味着不同的引用可以指向同一个内存位置 nim区分可被追踪的引用和不可被追踪的引用 不可被追踪的引用又称为指针 可被追踪的引 ...

  4. C++中引用与指针的区别(详细介绍)

    C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别   指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...

  5. [ZZ]C++中,引用和指针的区别

    (1) 引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也由可能不指向对象则必须使用 指针. 由于C++ 要求 reference 总是指向一个对象所以 re ...

  6. C/C++中数组与指针的关系探究

    数组与指针 长期以来,在C/C++中,数组名和指向数组首元素的指针常量到底是以一种什么关系,一直困扰着很多人.很多地方,甚至是一些教科书中都在说,"数组名就是一个指向数组首元素的指针常量&q ...

  7. 从编译器角度理解C++中的引用和指针

    欲分析指针和引用,则要分析变量名和地址之间的关系(不管你理解还是不理解,无论你是从老师那里听到的,还是网上看到的,应该都知道两句话:1. 指针就是地址,2.引用就是给变量起个别名) 所以我们就要来分析 ...

  8. c++引用和指针的彻底理解

     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指 ...

  9. c++引用与指针的区别

    c++引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. 指针的权威定义: In a declaration T D where ...

随机推荐

  1. C# 所有特性,特性所在命名空间,那些命名空间拥有特性类

    文章持续补充中 特性并不是集中在某一命名空间中,而是不同的特性在不同的命名空间下,特性是某一命名空间下提供的语法糖. 有哪些命名空间提供特性: 命名空间 描述 Microsoft.Build.Fram ...

  2. September 04th 2017 Week 36th Monday

    Try not to become a man of success but rather try to become a man of value. 不要努力去做一个成功的人,而要努力去做一个有价值 ...

  3. CSS控制图片和文字在同一行显示且对齐的3种方法

    CSS控制图片和文字在同一行显示且对齐的3种方法 在 HTML 代码中,有时会需要在文字旁边加上一个图标. 默认情况,是图片置顶对齐,文字置底对齐,所以通常图片高,文字低,不能水平居中对齐. 常见方法 ...

  4. jquery validation验证身份证号、护照、电话号码、email

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 【[HNOI2016]序列】

    莫队好题啊 莫队来做这个题的难点就是考虑如何在\(O(1)\)时间内由\([l,r]\)转移到\([l,r+1]\) 显然加入\(r+1\)这个数之后会和之前所有的位置都产生一个区间,就是要去快速求出 ...

  6. virtualbox+vagrant学习-2(command cli)-25-Machine Readable Output

    Machine Readable Output机器可读的输出 每个vagrant命令都接受一个--machine-readable的标志,它支持机器可读的输出模式.在这种模式下,终端的输出被机器友好的 ...

  7. java final使用

    一:final 1:有时候 我们需要一些类,不要被继承.即阻止定义子类.不允许扩展的类叫做final类,如果一个类在定义的时候,用final定义的时候,表示这个类是final类.无法定义子类. 语法 ...

  8. sencha 2.3中自己定义PullRefreshFn给PullRefresh加入下拉刷新事件

    Sencha removed the refreshFn from the pullrefresh plugin in ST 2.2. Here is an user extension with g ...

  9. #leetcode刷题之路50-Pow(x, n)

    实现 pow(x, n) ,即计算 x 的 n 次幂函数.示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100 #inclu ...

  10. 在centos环境下编译安装myrocksdb

    rocksdb(https://rocksdb.org.cn/)是脸书(facebook)公司开源的一个key-value存储引擎,基于leveldb开发.rocksdb使用的是LSM存储引擎,纯c+ ...