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到自己的内存区域中,相当于一个副本,最终操作完以后再同步到共享内存中,达到一个闭环,你可以这么理解指针,但它原理并不是我说的这样,仅供辅助理解。

该如何选择


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

目录
相关文章
|
15天前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
58 1
|
4月前
|
Java API C++
Java JNI开发时常用数据类型与C++中数据类型转换
Java JNI开发时常用数据类型与C++中数据类型转换
152 0
|
2月前
|
Rust 安全 Java
Java代码规范--排版,命名.:Rust能否撼动C++的王座?
系统编程是计算机科学的核心,C++长期占据主导地位,但其内存安全问题备受诟病。Rust以安全性为核心,通过所有权和生命周期概念避免了野指针和内存泄漏。此外,Rust的并发模型和日益丰富的生态系统使其成为现代系统编程的新选择,尤其在安全性和并发性方面表现出色。尽管C++依然强大,但Rust为开发者提供了更安全、易管理的选项,未来有望推动更多系统级应用的发展。
17 0
|
3月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
112 4
|
2月前
|
算法 Java Linux
Intellij Java JNI 调用 C++
Intellij Java JNI 调用 C++
30 0
|
4月前
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
93 3
|
4月前
|
Java C++
java和C++的标志符可以是中文(虽然不提倡)
java和C++的标志符可以是中文(虽然不提倡)
|
4月前
|
Java C++
Java和C++的一些区别
Java和C++的一些区别
|
4月前
|
Java API Android开发
Java通过JNI调用C++的DLL库
Java通过JNI调用C++的DLL库
27 0
|
17天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
60 30
下一篇
无影云桌面