NDK基础知识

前言

学习NDK之前我们首先需要了解NDK是什么?

Android NDK 是一套允许您使用 C 和 C++ 等语言,以原生代码实现部分应用的工具集。在开发某些类型的应用时,这有助于您重复使用以这些语言编写的代码库。——Android中文开发技术文档

那么我们首先需要有C或C++的基础,下面介绍一些C/C++的基础知识。

 

1、函数

指针函数:返回值是一个指针的函数,即本质是一个函数。

函数指针:指向函数的指针变量,即本质是一个指针变量。

 

2、内存 与 指针

指针是C / C++ 中重要的构造类型,指针赋予了C / C++程序直接访问和修改内存的能力。C / C++的许多重要应用,如编译、OS、嵌入式开发都依赖于这种能力。

3、Linux内存布局原理

内存:

硬件角度:内存是计算机必不可少的一个组成部分,是与CPU沟通的桥梁,计算机中所有的程序都是运行在内存中的。

逻辑角度:内存是一块具备随机访问能力,支持读、写操作,用来存放程序及程序运行中产生的数据的区域。

内存单位:位,字节,KB,MB

内存编址:计算机中内存按字节编址,每个地址的存储单元可以存放一个字节的数据,CPU通过内存地址获取指令和数据,并不关心这个地址所代表的空间具体位置。内存地址和地址指向的空间共同构成了一个内存单元。

内存地址:内存地址通常用十六进制的数据表示,指向内存中某一块区域。

4、C语言内存组成:

运行时系统分配空间(堆 栈)、编译时编译器分配空间  BSS段  数据段  代码段

指针数组:数组中每个元素都是指针。

指针优先级:()>[]>*

数组指针:也成为行指针一个数组的指针。

int (*p)[n]

优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时要跨过n个整型数据的长度。

5、内存对齐

共用体(union)

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的公用体,但是任何时候只能有一个成员带有值。公用体提供了一种使用相同的内存位置的有效方式。内存大小取用内存中最长的数据

6、动态库与静态库的区别

  • 静态库文件较大 动态库文件较小
  • 静态库需要在编译是 被链接在目标代码中,动态库在运行是才会被加载到目标代码
  • 静态库类似于Android的Module,一旦打包APK需要重新进行编译。
  • 动态库类似于jar包,打包时不需要重新进行编译

多态

//静态多态 Parent* child = new Child(); child->test(); //动态多态 //虚函数 virtual //构造方法不能设置为虚函数 //析构方法一般设为虚函数

模板编程

//函数模板 template <typename T> T a(T i, T j) { return i > j ? i : j; } //类模板 java泛型类 template <class T,class E> class W { public: T test(T t, E e) { return t+e; }; };

7、类型转换

  • 强转类型: 

  1. const_cast,字面上理解就是去const属性。(final)
  2. static_cast,命名上理解就是静态类型转换,如int--》char。
  3. dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。
  4. reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。

注意:4种类型转换的格式,如 TYPE B=static(TYPE)(A)

8、 IO 

FILE *fopen(const char* path,const char *mode);

mode :r,w,a,r+,w+,a+;

ofstream:输出文件流,创建并向文件写信息。

ifstream:输入文件流,从文件读取信息。

fstream:文件流,且同时具有ofstream和ifstream两种功能。

 

9、异常处理

throw try{ 

} catch(exception e){

}

10、容器

  • 序列式

元素的排列顺序与元素本身无关与添加顺序有关(vector,list,dequeue,queue,stack,priority queue)

  • 关联式

set map

11、命名空间

namespace

12、C++ 引用与指针

  1. 不能存在空引用。引用必须链接到一块合法的内存。
  2. 一旦引用被初始化为一个对象,就不能指向到另一个对象。指针可以在任何时候指向另一个对象。
  3. 引用必须在创建时被初始化。指针可以在任何时候被初始化。

发布了96 篇原创文章 · 获赞 235 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/u013132758/article/details/94355375