From Java to C++ 第三篇

简介: From Java to C++ 第三篇

前叙


From Java to C++ 第一篇

From Java to C++ 第二篇

风格逆转


前面两篇,以java代码实例的对比,来做了快速的C++转型,但其实那样根本不够,因为在任何一门语言里,最终拼的都是细节处理,为什么C++这么的难学,其实也是细节够多,知识点够复杂导致的,所以接下来我们就针对C++中,也是相对java所特有的一些特性,逐一学习,当然也会有对应的代码举例,来辅助理解。

大家都知道Java中有值传递和引用传递,但在C++中,又多了个指针传递,这到底是怎么回事呢?下面就一起一探究竟。

值传递


image.png

特点:

  • 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。
  • 当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递


image.png

特点:

  • 形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作
  • 方法里,用*a 操作指针
  • 调用方法时,需用&修饰实参

为什么用&修饰实参


这就跟&和*在修饰变量名时的作用有关

  • &b 取b的值地址,它被定义为取地址运算符
  • *a 取a的值 ,它被定义为**间接寻址运算符,**返回操作数所指定地址的变量的值

在指针传递中,传入地址&b,然后在该函数中,通过*a取出&b的地址的值,再进行相关操作。有点绕,但还算可以理解。

引用传递


image.png

特点:

  • 形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作
  • 行参作为局部变量在栈中开辟了内存空间,并指向实参变量的地址
  • 对形参做的任何操作都影响实参变量

指针和引用的区别


指针和引用都可以通过行参改变实参的值,那么它们到底什么区别呢? 其实这个跟引用规则有很大的关系,来看下引用的规则:

  • 引用被创建是必须初始化
  • 不能有NULL引用
  • 一旦应用被初始化,就不能改变引用关系

而指针以上规则都没有限制,那是为什么呢?其实指针传递本质上是值传递的方式,它所传递的是一个地址值。其实很多人对这个都不太好理解,你可以这么理解,我们都知道Java多线程中,操作共享内存的变量时,其实都是从共享内存中copy到自己的内存区域中,相当于一个副本,最终操作完以后再同步到共享内存中,达到一个闭环,你可以这么理解指针,但它原理并不是我说的这样,仅供辅助理解。

该如何选择


你可以将指针作为更加灵活的引用使用,当不满足引用规则的时候就使用指针,就这样。

目录
相关文章
|
1月前
|
存储 Java 编译器
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
91 0
|
13天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
30天前
|
算法 IDE Java
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
41 0
|
30天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
30天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
30天前
|
存储 算法 Java
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(一)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
1月前
|
Java 程序员 C++
【Java】Java与C++:比较与对比
【Java】Java与C++:比较与对比
24 0
|
2月前
|
Java 数据安全/隐私保护 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
20 1
|
2天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
17 0
|
2天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0