一、 参数中传入一个数组参数在C代码中修改原数组对象的值。
二、我犯的错误时使用++移动指针,到最后一步把数据赋值回原数据时导致原数据不正确。
三、这里操作的是int类型的数组,其他类型的数组也可以类推。
extern "C"JNIEXPORT void JNICALLJava_com_ctest_MainActivity_array(JNIEnv *env, jobject instance, jintArray arg0_) {//从数组中获取元素,参数是一是数组,参数二:是否拷贝默认NULL表示拷贝,JNI_FALSE表示不拷贝。(建议使用拷贝,由于内存回收机制不同)jint *arg0 = env->GetIntArrayElements(arg0_, NULL);//以下是对数组数据的具体操作for (int i = 0; i < 20; ++i) {//这里不要使用arg0++;使用*(arg0+i)的方式,由于使用++ 方式移动指针后,在最后一步赋值回元原数据时指针位置已经不是数据的起始位置*(arg0+1)+=10;}//将缓冲区的数据赋值到原数据达到修改原数据的作用。//参数一,原数据 参数二,缓冲数据//参数三:0:表示会把缓冲区(即在GetArrayElements方法中返回的)的内容拷贝回原始Java数组中,然后释放缓冲区// JNI_COMMIT:表示也会把缓冲区的内容拷贝回原始Java数组中,但是不会释放缓冲区// JNI_ABORT:表示不会把缓冲区的内容拷贝回原始Java数组中,直接释放缓冲区。env->ReleaseIntArrayElements(arg0_, arg0, 0);}