「java调用c指针」java调用cpp

博主:adminadmin 2023-03-20 16:34:06 72

本篇文章给大家谈谈java调用c指针,以及java调用cpp对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Linux环境下java调用C

你的JNI 写错了吧

java里的 char和 C的char完全不是一回事

java里你要写 stringjava_encryptpswd(string Password, string EncryptedKey );

生成的 C头文件,应该是 jstring java_encryptpswd(JEnvi* pEnvi,jstring Password,jstring EncryptedKey)

我手写的,没查资料,大概是这样。。

然后第一个参数是当前虚拟机事例,里面有很多可用的函数

后面两个是java里字符串结构,在C里面的表示法, 其实它就是指针而已。

然后你可以用pEnvi里的函数,将java的string,转化成 c的string。

然后调用 C的头文件的函数,得到结果,在组装成java的字符串。

比如例子:

我要用C来实现 java的字符串定位。

No.1 定义java的本地接口

public native String NAConvert(String arg1,String arg2);

No.2 生成头文件

JNIEXPORT jstring JNICALL Java_com_test_mainandroid_MainAndroidNative_NAConvert

(JNIEnv *, jobject, jstring, jstring);

No.3 自己创建一个实现文件,实现上面函数

jstring Java_com_test_mainandroid_MainAndroidNative_NAConvert

(JNIEnv* env, jobject obj, jstring arg1, jstring arg2)

{

jsize len = env-GetStringLength(arg1);

jchar* pBuf = new jchar[len+1];

env-GetStringRegion(arg1,0,len,pBuf);

jclass m = env-FindClass("java/lang/String");

jmethodID mid = env-GetMethodID(m,"charAt","(I)C");

jchar c = env-CallCharMethod(arg1,mid,1);

return arg1 ;

}

第一个是虚拟机事例指针,第二个参数是接口方法所在对象的 this。

第三个及以后才是你的接口的参数。

java里传入的所有对象参数,在C里面都是句柄。必须要用第一个参数env才能解析其中含义。

java引用与C语言指针的区别是什么?

java引用与C语言指针的区别有以下几方面:

1、现象

指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变,总是指向最初的对象。

2、编译

程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。

3、类型

引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心;C指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。

4、内存占用

所占内存:引用声明时没有实体,不占空间。C指针如果声明后会用到才会赋值,如果用不到不会分配内存。

5、内存溢出

JAVA引用的使用权限比较小,不会产生内存溢出。C指针是容易产生内存溢出的,所以程序员要小心使用,及时回收。

6、本质

JAVA中的引用和C中的指针本质上都是想通过一个别名,找到要操作的目标(变量对象等),方便在程序里操作。所不同的是JAVA的办法更安全,使用更加方便些,但没有了C的灵活,高效。

JAVA怎么实现C语言的指针相同功能

我用自己的理解来讲得通俗一点吧

C语言可以用一个指针值指向内存的任何一个空间,当然有很多非法的空间会被检测出来,所有乱用指针,编译器或者系统就会报错。

但JAVA不同,JAVA 通过一个引用,来指向内存的一个空间,换句话说,不是你想指向哪里,就指向哪里,因为你定义个变量时,这个空间由系统分配,同样,你定义一个引用,这个空间同样由系统分配,而我们做的事情只是将这两个由系统分配的空间进行一个指向关联,没有一个随心所欲的内存指向

区别很明显吧,我相信这样解释,连一个没有任何C基础的人都能明白,呵呵,因为这是我第一次做任务来答题,所以详细一点,也啰嗦一点,如果还不明白,我们可以进一步交流。

java调用c指针的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java调用cpp、java调用c指针的信息别忘了在本站进行查找喔。

The End

发布于:2023-03-20,除非注明,否则均为首码项目网原创文章,转载请注明出处。