/*该函数返回一个二维int数组 JNI 返回一个二维数组
*基本思想:
*1.构建一个obj数组objArray
*2.构建一系列<一维整数数组类型>对象iarr
*3.对obj数组的每一个元素赋值(iarr)(对象只能对一个元素进行Get/Set方法,不能Region)
*/
//size为二维数组的大小-->int[size][size]
JNIEXPORT jobjectArray JNICALL Java_ObjectArrayTest_initInt2DArray(JNIEnv *env, jclass cls, int size)
{
jobjectArray objArray;
int i;
//1.通过FindClass找到整数数组类([I).
jclass intArrCls = (*env)->FindClass(env, "[I");
if(intArrCls == NULL) return NULL; /* exception thrown */
//2.构建一个obj数组<obj现在就是整数数组类型,也可以是其它类型>,size表示数组的元素个数,NULL表示初始化元素
objArray = (*env)->NewObjectArray(env, size, intArrCls, NULL);
if (objArray == NULL) return NULL; /* out of memory error thrown */
for (i = 0; i < size; i++) {
jint tmp[256]; /* make sure it is large enough! */
int j;
//3.构建一个int数组类型的对象
jintArray iarr = (*env)->NewIntArray(env, size);
if (iarr == NULL) return NULL; /* out of memory error thrown */
for (j = 0; j < size; j++) { //给tmp数组随便赋个值
tmp[j] = i + j;
}
//4.给int数组对象赋值,0起始位置,size大小,tmp表示数据源
(*env)->SetIntArrayRegion(env, iarr, 0, size, tmp);
//5.给obj类型数组赋值,只能一个一个的赋值
(*env)->SetObjectArrayElement(env,objArray, i, iarr);
//6.释放局部对象引用
(*env)->DeleteLocalRef(env, iarr);
}
return objArray;
}
JNI编程中关于二维数组编程
猜你喜欢
转载自blog.csdn.net/yuzhihui170/article/details/37973049
今日推荐
周排行