JNI java本地开发接口
JNI 是一个协议
这个协议用来沟通java代码和外部的本地代码(c/c++).
通过这个协议,java代码就可以调用外部的c/c++代码
外部的c/c++代码也可以调用java代码
* 输出
#include //standard input output
#include main(){
printf("小志的逗比精神永存\n");
system("pause");
}
* C调用java的hello
public classHello
{public static voidmain(String[] dd){
System.out.println("hello from java");
}
}
#include #includemain(){
printf("hello from c\n");
system("java Hello");
system("pause");
}
* C的基本数据类型,
char, int, float, double, long, short, signed, unsigned
#java的基本数据类型长度
* byte:1
* short:2
* int:4
* long:8
* boolean:1
* char:2
* float:4
* double:8
#c的基本数据类型长度
* short:2
* int:4
* long:4
* char:1
* float:4
* double:8
#include #includemain(){//char, int, float, double, long, short, signed, unsigned
int i =3;char c = ‘a‘;long long ago = 12314324;short int i2 = 2;long int i3 = 3243;//printf("i的值为%d\n", i);
printf("char的长度:%d\n", sizeof(char));
printf("int的长度:%d\n", sizeof(int));
printf("float的长度:%d\n", sizeof(float));
printf("double的长度:%d\n", sizeof(double));
printf("long的长度:%d\n", sizeof(long));
printf("short的长度:%d\n", sizeof(short));
printf("long long的长度:%d\n", sizeof(long long));
printf("short int的长度:%d\n", sizeof(short int));
printf("long int的长度:%d\n", sizeof(long int));
system("pause");
}
* 输出函数
#include #include
/*%d - int
%ld – long int
%hd – 短整型
%c - char
%f - float
%lf – double
%u – 无符号数
%x – 十六进制输出 int 或者long int 或者short int
%o - 八进制输出
%s – 字符串*/main(){int i = -3;long l = 34567;char c = ‘a‘;float f = 3.1466666666;double d = 3.1466666666;char arr[] = "小志的二逼精神永存";
printf("%c\n", c);
printf("%d\n", i);
printf("%f\n", f);
printf("%lf\n", d);
printf("%u\n", i);
printf("%#x\n", l);
printf("%#o\n", l);
printf("%s\n", arr);
system("pause");
}
* 输入函数
#include #includemain(){
printf("请输入班级人数:\n");intnumber;//&:取出number的内存地址
scanf("%d", &number);
printf("请输入班级名称:\n");char name[10];
scanf("%s", &name);
printf("number的地址%#x\n", &number);
printf("name的地址%#x\n", &name);
printf("班级人数为%d,名称为%s\n", number, name);
system("pause");
}
“*”的三种用法
1. 乘法
2. int* p:定义一个指针变量p,p中存放一个内存地址,这个地址所存放的数据规定是int型
3. *p:取出p中保存的内存地址存放的数据
* 指针和指针变量的关系
指针就是地址,地址就是指针
地址就是内存单元的编号
指针变量是存放地址的变量
指针和指针变量是两个不同的概念
但是要注意: 通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样
* 为什么使用指针
指针的重要性
直接访问硬件 (opengl 显卡绘图)
快速传递数据(指针表示地址)
返回一个以上的值(返回一个数组或者结构体的指针)
表示复杂的数据结构(结构体)
方便处理字符串
指针有助于理解面向对象
#include #includemain(){int i = 3;//定义一个保存int类型数据的地址的指针变量 ,该变量的值是一个内存地址
int* p = &i;int** q = &p;
printf("i的地址%#x\n", p);
printf("i的值为%d\n", *p);
printf("i的值为%d\n", **q);
system("pause");
}
#include #includemain(){//野指针:没有赋值的指针
int*p;inti;double d = 3.14;
p= &d;//*p = 23;
printf("%#x\n", p);
printf("%lf\n", *p);
system("pause");
}
* 值交换(值传递: 所有语言所有平台,都只有值传递,引用传递传递的值是内存地址)
#include #include
void swap(int* p, int*q){int temp = *p;*p = *q;*q =temp;
}
main(){int i = 3;int j = 5;
printf("i=%d\n", i);
printf("j=%d\n", j);
swap(&i, &j);
printf("i=%d\n", i);
printf("j=%d\n", j);
system("pause");
}