• 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
    ",i,arr[i]);           
    	}
    	//2.通过指针方式获取 <*(arr+j)>
    	int j;
    	for(j=0;j<3;j++){
    	   printf("arr[%d]=%d
    ",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
    ",x);
    	       printf("y=%d
    ",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
    ",abc.age);
    	       printf("x=%d
    ",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读取失败
    ");
    	   }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方法
    
  • 相关阅读:
    HashMap 实现原理
    王东江网站
    网站建设
    mysql 查询 执行流程
    两个线程交替打印1到100
    三个线程交替打印十次ABC
    Java动态链接是什么意思
    双亲委派机制
    笔记
    redis集群搭建
  • 原文地址:https://www.cnblogs.com/tianshidechibang234/p/3886972.html
Copyright © 2020-2023  润新知