• JNI开发必学C/C++基础


    JNI开发系列目录

    1. JNI开发必学C++基础
    2. JNI开发必学C++使用实践
    3. Android Studio 4.0.+NDK项目开发详细教学
    4. Android NDK与JNI的区别有何不同?
    5. Android Studio 4.0.+NDK .so库生成打包
    6. Android JNI的深度进阶学习
    7. Android Studio 4.0.+NDK开发 This files is not part of the project

    博客创建时间:2022.9.16
    博客更新时间:2022.10.18

    以Android studio 7.0.0来分析讲解,所以是Android最新版NDK项目创建,其截图可能与低版本不一样。


    前言

    C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
    C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。

    标准库

    标准的 C++ 由三个重要部分组成:

    1. 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
    2. C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
    3. 标准模板库(STL),提供了大量的方法,用于操作数据结构等。

    C++的使用与特性

    大多数的 C++ 编译器并不在乎源文件的扩展名,但是如果您未指定扩展名,则默认使用 .cpp,其它的文件名也可以是.h文件。
    C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装、抽象、继承、多态

    C++ 的使用场景

    1. 基本上每个应用程序领域的程序员都有使用 C++。
    2. C++ 通常用于编写设备驱动程序和其他要求实时性的直接操作硬件的软件。
    3. C++ 广泛用于教学和研究。

    C++ 基本语法

    1. 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
    2. 类 - 类可以定义为描述对象行为/状态的模板/蓝图。
    3. 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
    4. 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。

    定义常量
    在 C++ 中,有两种简单的定义常量的方式:
    使用 #define 预处理器。
    使用 const 关键字。

    类的继承
    C++ 类的继承和 Java 也是大同小异,其格式如下:class B: access-specifier A。
    其中 access-specifier 是访问修饰符, 是 public、protected 或 private 其中的一个。访问修饰符的作用如下:

    1. 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
    2. 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
    3. 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。

    注意:C++支持多继承,class <派生类名>:<继承方式1><基类名1>

    C++ 关键字

    ColumnColumnColumnColumn
    asmelsenewthis
    autoenumoperatorthrow
    boolexplicitprivatetrue
    breakexportprotectedtry
    caseexternpublictypedef
    catchfalseregistertypeid
    charfloatreinterpret_casttypename
    classforreturnunion
    constfriendshortunsigned
    const_castgotosignedusing
    continueifsizeofvirtual
    defaultinlinestaticvoid
    deleteintstatic_castvolatile
    dolongstructwchar_t
    doublemutableswitchwhile
    dynamic_castnamespacetemplate

    C++ 基本数据类型

    类型关键字描述
    布尔型bool存储值 true 或 false。
    字符型char一个字符(八位)的整数类型。
    整型int对机器而言,整数的最自然的大小。
    浮点型float单精度浮点值。单精度是这样的格式,1位符号,8位整数,23位小数。
    双浮点型double双精度浮点值。双精度是1位符号,11位指数,52位小数。
    无类型void表示类型的缺失。
    宽字符型wchar_t宽字符类型。

    数据范围

    类型范围
    char1 个字节-128 到 127 或者 0 到 255
    unsigned char1 个字节0 到 255
    signed char1 个字节-128 到 127
    int4 个字节-2147483648 到 2147483647
    unsigned int4个字节0 到 4294967295
    signed int4 个字节-2147483648 到 2147483647
    short int2 个字节-32768 到 32767
    unsigned short int2 个字节0 到 65,535
    signed short int2 个字节-32768 到 32767
    long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
    signed long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
    unsigned long int8 个字节0 到 18,446,744,073,709,551,615
    float4 个字节精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
    double8 个字节双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
    long double16 个字节长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
    wchar_t2 或 4 个字节1 个宽字符

    signed 和 unsigned 指定了数据是否有正负; short 和 long 主要指定了数据的内存大小。

    转义符

    转义序列含义
    \\ 字符
    ’ 字符
    "" 字符
    ?? 字符
    \a警报铃声
    \b退格键
    \f换页符
    \n换行符
    \r回车
    \t水平制表符
    \v垂直制表符
    \ooo一到三位的八进制数
    \xhh . . .一个或多个数字的十六进制数

    总结

    JNI标准作为Java平台的一部分,提供了与编译型语言进行交互的手段,尤其是对C/C++的交互。C/C++是JNI开发必须要掌握的技术,下一篇博文C++使用实践来讲解C++的实践使用。


    相关链接

    1. JNI开发必学C++基础
    2. JNI开发必学C++使用实践
    3. Android Studio 4.0.+NDK项目开发详细教学
    4. Android NDK与JNI的区别有何不同?
    5. Android Studio 4.0.+NDK .so库生成打包
    6. Android JNI的深度进阶学习
    7. Android Studio 4.0.+NDK开发 This files is not part of the project

    博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !

  • 相关阅读:
    c++模板
    nginx配置server
    Vue2、Vue3知识总结---完整版✨
    Spring Boot中使用MongoDB完成数据存储
    深度学习(一)读取数据 图片数据
    七牛云图片上传
    线性判别分析(机器学习)
    亚马逊的这个Bug居然要花两个月时间来解决?
    不同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ
    软考 系统架构设计师系列知识点之基于架构的软件开发方法ABSD(1)
  • 原文地址:https://blog.csdn.net/luo_boke/article/details/126908373