#include <jni.h>
#include "logTool.h"
#include <cstdlib>
//函數(shù)指針 int (*__comparator)(const void* __lhs, const void* __rhs)
jint compare(const jint *a, const jint *b) {
// const int *a1 = static_cast<const int *>(a);
// const int *b1 = static_cast<const int *>(b);
LOGE("a1:%d, b1:%p",*a,&b);//*a 取值, &b取地址
return *a - *b;
}
//表態(tài)注冊
extern "C"
JNIEXPORT void JNICALL
Java_cn_ztx_kotlindemo2_MainActivity_sort(JNIEnv *env, jobject thiz, jintArray arr) {
jint *pInt = env->GetIntArrayElements(arr, nullptr);
jsize size = env->GetArrayLength(arr);
//(void* __base, size_t __nmemb, size_t __size, int (*__comparator)(const void* __lhs, const void* __rhs));
//排序操作,此方法在 stdlib.h 中
qsort(pInt, size, sizeof(int), reinterpret_cast<int (*)(const void *, const void *)>(compare));
/**
* 0: 刷新Java層,并釋放 C++ 數(shù)組
* JNI_COMMIT: 只提交,只刷新Java層,不釋放C++ 數(shù)組
* JNI_ABORT: 只釋放C++ 數(shù)組
*/
env->ReleaseIntArrayElements(arr,pInt,0);
}
必須使用 env->ReleaseIntArrayElements 方法來刷新Java層的數(shù)組,并且釋放C++的數(shù)組