C++基础:指针和引用的区别

*例

int a;

int &b = a;

其中b是a的引用,b引用了a,a被b引用。b 相当于 a 的别名,对 b 的任何操作就是对a的操作。所以b既不是a的拷贝,也不是指向a的指针,其实b就是a它自己。引用的规则:引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。

不能有 NULL 引用,引用必须与合法的存储单元关联(指针则可以是 NULL)。

一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

引用的主要功能是传递函数的参数和返回值。

C++ 语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。成员函数的值传递

void FuncV(int x)

{

x = x + 10;

}

...

int n = 0;

Func1(n);

cout << "n = " << n << endl; // n = 0

由于 FuncV 函数体内的 x 是外部变量 n 的一份拷贝,改变 x 的值不会影响 n, 所以 n 的值仍然是 0。成员函数的指针传递

void FuncP(int *x)

{

(* x) = (* x) + 10;

}

...

int n = 0;

Func2(&n);

cout << "n = " << n << endl; // n = 10

由于 FuncP 函数体内的 x 是指向外部变量 n 的指针,改变该指针的内容将导致 n 的值改变,所以 n 的值成为 10。成员函数的引用传递

void FuncR(int &x)

{

x = x + 10;

}

...

int n = 0;

Func3(n);

cout << "n = " << n << endl; // n = 10

由于 FuncR 函数体内的 x 是外部变量 n 的引用,x 和 n 是同一个东西,改变 x 等于改变 n,所以 n 的值成为 10。

总结

对比引用传递、值传递和指针传递的示例可知,引用传递和指针传递的性质基本一样,而引用的传递调用方式更像"值传递"。

引用传递与指针传递的功能相似。

但指针能够毫无约束地操作内存中的任何东西,虽然指针功能强大,但是非常危险。

在程序中如果只需要借用一下程序的别名尽量用引用传递。

若你对人工智能(CV/NLP)、C++/python编程、互联网就业及发展有兴趣,欢迎点赞关注和收藏。谢谢鼓励!!!

C++相关知识:Anxjing.AI:C++ this_thread::sleep_for​zhuanlan.zhihu.com

Anxjing.AI:C++ Lambda表达式​zhuanlan.zhihu.comAnxjing.AI:C++并发_condition_variable​zhuanlan.zhihu.comAnxjing.AI:生产者-消费者模型​zhuanlan.zhihu.comAnxjing.AI:C++预处理指令​zhuanlan.zhihu.comAnxjing.AI:C++工具:Cmake​zhuanlan.zhihu.comAnxjing.AI:SSH 学习​zhuanlan.zhihu.comAnxjing.AI:记录C++阶段性学习一​zhuanlan.zhihu.comAnxjing.AI:DesignPatterns C++:单例模式​zhuanlan.zhihu.comAnxjing.AI:C++基础:map简析​zhuanlan.zhihu.comAnxjing.AI:C++基础:memset函数简析​zhuanlan.zhihu.comAnxjing.AI:C++基础:break&continue区别​zhuanlan.zhihu.comAnxjing.AI:C++基础:指针和引用的区别​zhuanlan.zhihu.comAnxjing.AI:C++中::和:, .和->的作用和区别?​zhuanlan.zhihu.comAnxjing.AI:string中c_str()的使用方法和特性​zhuanlan.zhihu.comAnxjing.AI:C ++ strcpy()和strncpy()函数​zhuanlan.zhihu.comAnxjing.AI:C++基础-关键字virtual​zhuanlan.zhihu.comAnxjing.AI:C++基础-函数重载​zhuanlan.zhihu.comAnxjing.AI:C++基础-static​zhuanlan.zhihu.comAnxjing.AI:C++基础:判断文件是否存在的方法​zhuanlan.zhihu.comAnxjing.AI:C++基础-strstr查找子串​zhuanlan.zhihu.comAnxjing.AI:C++基础:std::thread多线程​zhuanlan.zhihu.com

python指针引用的区别_C++基础:指针和引用的区别相关推荐

  1. 对指针变量取地址_C语言指针简介(amp;和*运算符)

    取地址符(&) 和  取值符(*) (1)& 运算符 :用于取一个对象的地址 例如:int *p;    p = &c;    将c的地址赋值给指针变量p,我们称p为 &quo ...

  2. this指针作为函数参数_C++以指针作为函数参数(学习笔记:第6章 10)

    以指针作为函数参数[1] 为什么需要用指针做参数? 需要数据双向传递时(引用也可以达到此效果) 用指针作为函数的参数,可以使被调函数通过形参指针存取主调函数中实参指针指向的数据,实现数据的双向传递.( ...

  3. c语言和java语法的区别_c语言和java语法有区别吗?

    c语言和java在语法上有区别,区别是: 1.C语言有指针,java没有指针: C语言的语法比较简单,但是它的亮点指针很容易出错,想要好好的运用指针是件很难的事情,用好了,对程序有很好的帮助,反之,就 ...

  4. pascal和python的区别_C语言和Pascal语言的区别,要详细。

    展开全部 C 和 Pascal 曾经不太像,但是越来越像. 现代 C 语言借32313133353236313431303231363533e59b9ee7ad9431333236386134鉴了很多 ...

  5. python语言与c语言java的区别_c语言和java有什么区别

    区别:1.单文件的编译时间java比C语言快:2.C语言可以直接操作内存,java不能直接操作:3.C语言可以封装动态库,java不行:4.C语言有指针,java没有指针:5.C语言可以直接操作串口, ...

  6. c++和c语言的区别_C 语言和 C++ 有什么区别?老程序员居然这样理解,不怕你不懂...

    差不多是win98跟winXP的关系.C++是在C的基础上增加了新的理论,玩出了新的花样.所以叫C加加. C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输 ...

  7. php和js操作数据库的区别,PHP基础与JS操作的区别

    嵌入页面方式 JS嵌入方式: PHP嵌入方式:<?php ?>(常用) 输出语法 Javascript输出 1.alert("警告的内容") 2.prompt(&quo ...

  8. 2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

    2020-09-25C++学习笔记引用2:二级指针形参与指针引用搭配做形参的使用方法区别重难点,注意事项主看综合代码(1.指针形参2.引用形参3.二级指针形参4.指针引用形参) 1.指针引用 #inc ...

  9. 指针和引用的区别_浅析指针与引用

    关注"杜明c",每天进步一点点! 已经时隔一个多月没有发文章了,主要是太忙了,绝不是偷懒今天给大家聊一聊指针和引用的不同之处在哪里. 摘要 指针的使用 引用的使用 二者的区别 后话 ...

最新文章

  1. JAVA_OA(十四)番外:JAVAWEB防止表单重复提交的方法整合(包括集群部署)
  2. 微软:明明修复了Bug,你们还把我骂上热搜?
  3. POJ - 1655 Balancing Act(树的重心)
  4. com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGI
  5. 第二天:装饰模式及面向对象设计原则4则
  6. 【ArcGIS微课1000例】0016:ArcGIS书签操作(添加书签、管理书签)知多少?
  7. 【超详细】在Linux上远程登录遇到的若干问题及解决方法(一)
  8. hdu-1173(最短距离)
  9. 手算KMP算法next数组
  10. 生活没那么复杂,“不要脸”就对了
  11. PCL法线计算及原理
  12. N76E003合并boot和app
  13. 大数据周会-本周学习内容总结04
  14. 2023年全国最新会计专业技术资格精选真题及答案59
  15. Chinese Dragon
  16. JS打印三角形排列、四边形排列和菱形排列
  17. 所有的事情都会趋于平淡
  18. 随机噪声的压制c语言,一种地震数据随机噪声压制方法及装置的制造方法
  19. 用matlab实现运筹学最短路问题,运筹学 最短路问题.ppt
  20. qt creator 运行 出现 “can not open .... jom for write 解决方案

热门文章

  1. 一些我工作中经常使用的C4C ABSL代码片段
  2. SAP UI5 bindProperty
  3. how is metadata got - DB table iwfndi_med_srh and IWFNDCL_MGW_REQUEST_MANAG
  4. replication debug for PRODUCT_MAT
  5. Jerry制作的软件工程里Design for Change的培训材料
  6. IBASE and ES change pointer
  7. bgrfc entry point
  8. SAP UI5的calendar 日历控件
  9. S/4HANA服务订单Service Order的批量创建
  10. 点击了SAP CRM HANA report超链接,背后都发生了什么