Android的JNI开发
变量的定义 int i; typedef int x;//定义一个int x数据类型 x a=10; printf("size=%d",sizeof(i));//获取int类型长度(4个字节) system("pause");//不让窗体立即消失 循环 在c语言中,循环的变量必须在外面生命 int i for(i=0;i<10;i++){ printf("i=%d",i); } 指针变量 int i=10; int* p;//声明一个指针变量 p=&i;//取出i的地址值,赋值给指针变量 *p取出指针指向的值 多级指针 int i=10; int* p; p=&i; int** s; s=&p; int*** x; x=&s; //取出i的值,这里有一个规律,前面有多少个*,取得时候就在签名加几个* printf("i=%d",***x); 数组 数组的定义 int arr[3]或者int arr[]={1,2,3}; 遍历数组: //1.普通方式 int i; for(i=0;i<3;i++){ printf("arr[%d]=%d\n",i,arr[i]); } //2.通过指针方式获取 <*(arr+j)> int j; for(j=0;j<3;j++){ printf("arr[%d]=%d\n",j,*(arr+j)); } 结构的定义与使用 //1.定义结构体 struct person{ int age; } //2.结构体的使用 struct person p; p.age=10; printf("p.age=%d",p.age); 结构体指针变量的定义与使用 struct person{ int age; } *p;//声明一个结构体指针变量 //动态申请内存空间 p=(struct person*)malloc(sizof(struct person)); p->age=18; printf("p->age=%d",p->age); 函数的定义与使用 #include<stdio.h> int sum(int x,int y);//声明一个函数 main(){ int x=10; int y=10; int z=sum(x,y);//调用函数进行求和运算 printf("z=%d",z); system("pause"); } //真实的函数 int sum(int x,int y){ return x+y; } 函数的还可以直接定义 int sum(int x,int y){ return x+y; } main(){ int x=10; int y=10; int z=sum(x,y);//调用函数进行求和运算 printf("z=%d",z); system("pause"); } 两个变量的交换 change2(int* x,int* y){ int z=*x; *x=*y; *y=z; } main(){ int x=1; int y=2; change2(&x,&y); printf("x=%d\n",x); printf("y=%d\n",y); system("pause"); } 指针函数 #include<stdio.h> int sum(int x,int y){ return x+y; } main(){ int (*s)(int,int); //定义一个函数指针 s=sum; //给函数指针赋值 int x=s(2,3); printf("x=%d",x); system("paud"); } 在结构体中使用函数指针 1.定义一个函数 2.顶一个结构体,并在结构体中 定义一个函数指针 3.在main函数中,定义一个结构体指针 4.通过结构体指针给函数指针赋值,以及成员赋值 #include<stdio.h> //1.定义一个函数 int sum(int x,int y){ return x+y; } //2.顶一个结构体,并在结构体中 定义一个函数指针 struct stu{ int age; //函数指针 int (*score)(int,int); } main(){ //3.定义一个结构体指针 struct stu* s=(struct stu*)malloc(sizeof(struct stu*)); //4.给函数指针赋值 s->score=sum; //给结构体中成员属性赋值 s->age=s->score(1,2); printf("age=%d",s->age); system("pause"); } 联合的定义与使用 //定义一个联合 union un{ int age; char x; } main(){ union un abc;//定义一个联合变量 abc.age=10; printf("age=%d\n",abc.age); printf("x=%d\n",abc.x); system("pause"); } 枚举的使用 //定义一个枚举,枚举中的成员都是一个整型常量值 enum mode{ a=100,//如果不赋值,默认从0开始,如果赋值则后面的一次加1 b } main(){ //定义一个枚举变量 enum mode m=a; printf("m=%d",m); system("pause"); } 类型说明 typedef int xx ; xx a=100; define指令,定义全局内容;在c中1代表真,0代表假 #define TRUE 1; #define FALSE 0; if(TRUE){ .... }else{....} 定义一个全局方法 #define Max(x,y) (x>y)?x:y 动态数组 int* arr=(int*)malloc(4*10); 文件读取 int main(){ FILE* fp; char ch; if((fp=fopen("mm.txt","rt"))== NULL){ printf("文件不存在or读取失败\n"); }else{ //怎么读取文件的内容? ch=fgetc(fp);//从流里面获取字符 while (ch!=EOF) { putchar(ch);//在stdout上输出字符 ch=fgetc(fp); } fclose(fp);//关闭一个流 } system("pause");//暂停 让cmd窗口不消失 } jni开发流程: 1 新建一个android工程 2 add native support 生成jni文件夹 Android.mk文件 + xx.cpp文件 3 修改文件 Android.mk .cpp 改为.c xx.cpp文件 改为.c ---------------------------------------------------------------------------- 该工程可以进行ndk开发 4 在MainActivity.java里面添加一个native方法 public native String getString(); 5 生成头文件 cmd cd /d 工程的src目录 javah com.itcast.jni1.MainActivity 在src生成一个 com_itcast_jni1_MainActivity.h ---------------------------------------------------------------------------- 生成了头文件 6 把com_itcast_jni1_MainActivity.h 复制到jni下面,拷贝里面的方法到.c文件 7 完成.c文件内容的编写 ---------------------------------------------------------------------------- c代码编写完成 8 编译c代码 右键工程 --》 Build configuration --> buill all 生成.so文件 9 加载动态链接库文件 static{ System.loadLibrary("hello"); } 10 调用native方法