01_什么是jni
Java Native Interface ---- 一种协议,提供了一套编程框架
实现Java和本地代码相互调用
02_为什么需要jni
-
操作低层硬件,Android上面的传感器
-
当程序对运行效率和空间有要求的时候,图形的渲染,音视频的解码
-
复用已经成熟的C开源软件,OpenGL(开源图形库),OpenSSL(安全加密),SQLite3,FFmpeg
-
安全性的要求,本地C代码反编译困难
-
复用公司之前的成熟代码,跑跑卡丁车跨平台
03_C基础内容
使用JNI前提:
-
掌握java语言
-
了解C/C++语言
-
掌握JNI流程和规范
-
掌握开发工具NDK(Native Development Kits)
04_C开发工具介绍
05_C基本数据类型
06_C里面的输出函数
格式化输出函数printf d u o x 整数,c s,f
- %d 十进制有符号 int
- %u 十进制无符号 unsigned int
- %o 八进制无符号 unsigned int
- %x 十六进制无符号 unsigned int
- 在%o和%x中间加#,输出前导0,0x
- %c 输出一个字符
- %s 输出一个字符串,若干个
- 若要输出long和double类型,在相应字符前l
- %ld %lf
- 输出short类型用%hd
-
%p输出变量的地址
07_C里面的输入函数
08_什么是指针
1.内存:一维线性分部
内存的最小单位1byte,8bits
32位CPU:4G内存地址空间
2.内存单元:通过内存编号来区分管理
内存单元的编号可以作为内存单元的地址
3.指针:内存单元的编号
09_指针变量及运算符
10_指针的指向
11_指针的误用
12_函数传参的值传递和地址传递
函数传参交换2数值:
定义一个 数据类
13_利用地址传递获得函数中多于一个的结果
C语言一个函数传递返回多个数据:传递多余变量的指针,或者结构体
Java参数传递:类似C的结构体指针传递
14_C中字符串的存储及操作
SIzeof() :求得是字符串数组的长度,而不是字符串的长度
strlen()测试字符串长度,不计算空字符(包括\0) string.h
15_函数不能返回栈上(局部)变量的地址
16_指针的运算
P(NULL) + 1 = 0x1(x)
指针变量加减一个整数n,指针向高地址或低地址移动n个对象,n*sizeof(变量)
在连续的内存空间上移动
3代表对象个数,其长度是12字节
17_数组
相同数据类型变量的集合
-
元素类型相同
-
元素内存连续
-
数组名代表首元素首地址
18_指针与数组的关系
、
传递首地址后,在函数里更改了数组元素,外面的数组也会变
19_C程序运行时内存的分布图
20_堆区内存分配及释放
栈相对于堆非常的小
堆:只要有内存就可以再分配
栈:自动释放
malloc 返回void *
避免内存泄露,free(p)