JNI (java native interface) java本地开发接口(一句话 : 就是1个 adapter)。
JNI 是一个协议 - 是用来让 java代码和C,C++ 代码可以沟通(相互调用) 的一种协议 ,JNI 扩展了java虚拟机的能力 。
Java语言提供的类库无法满足要求,且在数学运算,实时渲染的游戏上,音视频处理等方面上与C/C++相比效率稍低。
Java语言无法直接操作硬件,C/C++代码不仅能操作硬件而且还能发挥硬件最佳性能。
首先 要从最基本的开始 androd 调用 C,C++代码 肯定最起码代码不说会写,最起码是要能看懂和修改的,我把大1学的C语言也早早就忘光了哈哈。所以跟着复习点基础吧。
更深入的学习就有待以后吧 - -
C语言的基本数据类型:
char(C语言中 byte类型也是用 char), 1 int, 4 float, 4 double, 8 signed, 4 有符号的 unsigned, 4 无符号的 long, 4- 8根据编译器的不同 short, 2
C语言的输入和 输出:
%d - int %ld – long int %c - char %f - float %lf – double %x – 十六进制输出 int 或者long int 或者short int %o - 八进制输出 %s – 字符串 int a; //定义变量a scanf("%d",&a); //从键盘上获取数据 放入a所在的 地址 &a printf("a=%d ",a); // 输出a的值
C语言的指针 - 这个是核心啦
int p =11; //32位操作系统 指针占 4个字节 64位占8个字 int* pp = &p; printf("P的中存放的值: %d ",p); printf("P的地址是: %X ",&p); printf("PP指针变量存放的地址是: %X ",pp); printf("PP指针变量的大小: %d ",sizeof(pp)); printf("PP指针变量存放的地址 - 对应的值: %d ", *pp); int* p; //定义一个指针变量 垃圾值 指针变量如果没有赋值就不能使用 int dd; char* c; ; // 编译错误 不符合的指针类型 c = ⅆ //printf("*p=%d ",*p);
指针输出图:
C语言的多级指针:
int bb = 10; int* m = &bb; //m存的是 (bb的内存地址 ) int** mm = &m; //mm 存的是 m指针变量的 -地址 printf("mm的值(m的内存地址) : %X ", *mm); printf("(m的内存地址) 所对应的值 = bb : %d ", **mm); printf("bb : %d ", bb);
数组
int a[5] = {1,2,3,4,5}; printf("a0= %X ", &a[0] ); // a表示的直接就是 数组a 的第一个元素所对应的内存区域 printf("a0= %X ", &a ); printf("a0= %d ", *(a+0)); printf("a1= %d ", *(a+1)); printf("a2= %d ", *(a+2)); printf("a3= %d ", *(a+3)); //利用char类型指针 方便的表示一个字符串 char* arr1= "hello androd ndk"; printf("%s",arr1);
动态数组
// 6.动态的创建1个数组 int* aa = malloc(sizeof(int) * 6); //先申请1个能够存 6个 int的空间 aa = realloc(aa , sizeof(int)* 8); //变成 能放8个的 空间大小 *aa =0; *(aa+ 1) =1; *(aa+ 2) =2; printf("aa1= %d ", *(aa+1)); printf("aa2= %d", *(aa+2)); //free(aa); //用过后 不用了要自己手动释放
C语言的结构体
//结构体 - 这个就有点类似 java中的class了 struct ll{ int age; char* name; char* sex; }; struct ll s={11, "lilei","boy"}; struct ll* lss; printf("age = %d ", s.age); printf("name = %s ", s.name); printf("sex = %s ", s.sex); //2种方式 lss = &s; printf("age = %d ", lss->age); printf("name = %s ", lss->name); printf("sex = %s ", lss->sex);
联合体
union { long i; char ii; int iii; } pp ; // 联合体的作用就是用来表示一组数据类型 数据的数据类型为这一组中的某一种数据类型 //注意 : 联合体里面的数据内容会相互覆盖 printf("pp:%d ",sizeof(pp)); pp.ii = 'A'; printf("long=%ld ",pp.i); printf("char=%c ",pp.ii); printf("int=%d ",pp.iii);
枚举
enum WeekDay { Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday }; //其实就是一连串的数字而已 enum WeekDayNum { Monday1=50,Tuesday1,Wednesday1,Thursday1,Friday1,Saturday1,Sunday1 }; enum WeekDay day = Sunday; enum WeekDayNum dayNum = Sunday1; printf("day : %d ",day); printf("dayNum : %d ",dayNum); system("pause");
typedef
typedef int myInt; myInt a = 10; printf("myInt - a: %d ",a);
宏定义
#define STE_LEN 80
还有很多要复习的东西,先看这么多。