使用NDK进行JNI编程与实践四:数组类传参至C/C++的修改

本文介绍如何使用Java Native Interface (JNI) 在Java与C++间传递并操作int型数组。通过具体代码示例,展示了如何在C++层对从Java传入的数组元素进行加10的操作,并将修改后的数组返回Java层。
摘要由CSDN通过智能技术生成
  1. java中本地方法:
    向java的本地方法中传入一个int型数组,在C/C++层将数组中的元素值各自 加10之后返回
    /* JNI返回数组arrys并将每个元素的值加10 */
    public native int[] intMathod(int[] arrys);
  1. C++代码实现:
JNIEXPORT jintArray JNICALL Java_com_example_jnitest_JNITest_intMathod
        (JNIEnv *env, jobject jobj, jintArray jintArray) {
    /* 获取数组长度 */
    jint jlen = env->GetArrayLength(jintArray);
    LOGE("Array length: %d", jlen);
    /* 获取数组元素:不以复制的形式获取 */
    jint* jArr = env->GetIntArrayElements(jintArray, 0);

    for (int i = 0; i < jlen; i++)
    {
        *(jArr + i) += 10;
    }
    /* 释放资源 */
    env->ReleaseIntArrayElements(jintArray, jArr, 0);

    return jintArray;
}
  1. 测试代码:
	int[] arrays = {1, 2, 3};
	JNITest obj = new JNITest();
	int[] arraysNew = obj.intMathod(arrays);
	for (int i = 0; i < arraysNew.length; i++)
	{
		Log.e(TAG, "onClick: arrys:" + arraysNew[i]);
	}

代码路径:

https://github.com/jiyi666/apk-demo/tree/master/JNITest
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值