JNI入门

 

  •  

 

 

 

xiAndroid 下JNI开发
1.概述:
a)定义:JNI java native interface java本地接口
b)作用:实现java和本地代码之间的相互调用
c)实际上就是一套协议
d)反编译不容易,安全性较高,关键的业务逻辑需要c实现,效率更高
2.基本语法:
a)头文件
i.#include<stdio.h> 标准的输入输出
ii.#include<stdlib.h>标准的函数库
b)主方法
i.Main(){}
c)C的基本数据类型
i.基本数据类型:
1.char 1字节
2.Short 2字节
3.Int 4字节
4.Long 4字节

 

 

    1. 5.Float 4字节
  •  

     

    6.Double 8字节
    7.Void 1字节
    ii.基本类型:
    char int short long float double void (signed unsigned)
    3.C语言的输入输出函数
    a)C的输出函数(使用printf()方法打印输出)
    i.%d : int 
    ii.%ld:long int 
    iii.%lld: long long 
    iv.%hd:端整型
    v.%c: char
    vi.%f : float
    vii.%lf : double
    viii.%u: 无符号数
    ix.%x : 十六进制输出 (int /long int /short int)
    x.%o :八进制输出 
    xi.%s : 字符串(使用的是char数组)
    b)C的输入函数(scanf()方法监听键盘输入的内容)
    i.语法:scanf(“占位符”,&地址); &:表示取地址符
    4.C语言的指针(指针就是一个地址,指针里面存放的是地址)
    a)指针变量:用来存放一个地址到的变量,存放的是某种数据类型数据的地址
    b)*的三种含义
    i.表示乘法,如 :i*j;
    ii.放在数据类型的后面,表示指针变量,用来存放这种数据类型数据的地址,如:int i= 3; int* p ;p可以存放i的地址,即p = &i;
    iii.*放在指针变量的前面,表示把这个地址中的数据取出来,如:int i=3;int * p =&i; 那么 *p = 3;
    c)指针常见错误
    i.声明了但是为赋值 --->野指针
    ii.指针;类型错误Int* p类型指向double类型的地址
    5.函数(方法):
    a)主函数:main(){}
    b)子函数:子函数必须在主函数之前创建,
    6.值传递机制:
    a)值传递;函数内部的使用,直接传递值,不同方法间,值传递传递的是地址(变量的引用);
    b)引用传递:就是把地址传递过去
    c)所有的传递其实本质都是值传递,引用传递也是传递的值,不同的是这个值是一个地址
    7.多级指针
    a)二级指针变量只能保存一级指针变量的地址
    b)有几个*就代表是几级指针,int*** p 三级指针
    c)幻影数据:旧数据,无效数据(在内存中为及时销毁的数据,调用该数据的时候仍然存在)
     
    8.数组和指针的关系
    a)数组的创建int arr[] = {1,2,3,4};注意:[]必须放在数组名之后
    b)C语言中数据不检查是否索引越界,当索引越界的时候获取的是随机数
    c)数组占用的内存空间是连续的
    d)数组变量保存的第0个元素的地址们也就是首地址
    e)Int数组在内存中的地址,相邻元素相隔4位字节,同理,double数组的相邻元素相隔8位字节,也就是说每个元素占据的内存大小,只跟数组的数据类型有关.
    f)指针位移一个单位,一个单位是多少个字节没取决于指针的类型
    g)指针的长度,不管变量的类型是什么,其内存地址的长度一定是相同的
    h)内存地址不能进行运算
    9.C语言堆内存和栈内存的简介
    a)栈内存:(静态内存)
    i.系统自动分配,系统自动销毁,连续的内存区域,向低地址扩展,大小固定.
    ii.例如;子函数执行完,子函数中的所有的局部变量都会被销毁,内存释放,但内存地址不会被销毁,只是内存地址上的值被销毁了
    b)堆内存:(动态内存)
    i.程序员手动分配(java中:new,C语言中:malloc),控件不连续,大小取决于系统 的虚拟内存,回收:C语言中需要程序员手动回收shifang (free(参数)方法),java中自动回收
    10.结构体(类似与java中的对象可以用来存储数据)
    a)结构体的定义
     
    b)结构体的使用
     
    注意:结构体的属性长度会被自动补齐们这是为了方便指针位移运算
    c)结构体的函数(类似于java中的方法)
    i.结构体中不能定义函数,但是可以声明一个函数
    ii.函数的定义和使用
     
     
    函数的简介
    程序运行时,函数也保存在内存中,也有一个地址
    结构体中只可以定义变量,声明函数,不可以定义函数
    函数指针也是变量,属于指针变量
    函数指针的定义 返回值类型(*变量名)(参数)
    函数指针的赋值;函数指针只能指向跟他分返回值和接受参数相同的函数
    11.联合体(类似java中的泛型,可以表示多种类型)
    长度等于联合体中定义的变量当中最长的哪个
     
    12.枚举(和java中枚举的使用一样)
     
    13.类型的定义(自定义类型)
    . %s : 字符串(使用的是char数组)

     

     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值