c直接操作JAVA中的数组

**
 * jni对数组运算
 * 在C中没有创建新的数组副本,直接在原来的java数组上面修改。然后返回了jintArray类型数据
 */
JNIEXPORT jintArray JNICALL Java_com_org_vincent_javacallc_JNI_increseArray
        (JNIEnv * env, jobject job, jintArray jarr){

    //1、得到java传过来的数组长度
    jsize size=(*env)->GetArrayLength(env,jarr);
    //2、得到C下的数组元素,JNI_FALSE表示不复制新的副本, jint直接获取jintArray指针
    jint *intArray=(*env)->GetIntArrayElements(env,jarr,JNI_FALSE);
    //3、遍历数组
    int i=0;
    for (i = 0; i < size; ++i) {
        *(intArray+i)=*(intArray+i)+10;
        LOGI("intArray[%d]=%d",i,*(intArray+i));
    }
    //这个语句必须要,不然java端不能获取到修改后的新数据
    (*env)->ReleaseIntArrayElements(env,jarr,intArray,0);
    //返回结果
    return  jarr;

}

猜你喜欢

转载自my.oschina.net/u/2963604/blog/2987340