Accessing Arrays

2024-08-21 17:08
文章标签 arrays accessing

本文主要是介绍Accessing Arrays,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分两种情况:

(1)基本元素数组

(2)对象数组

(1)基本元素数组

(i)拷贝基本元素数组:

JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
{jint buf[10];jint i, sum = 0;(*env)->GetIntArrayRegion(env, arr, 0, 10, buf);            //arr-->buffor (i = 0; i < 10; i++) {sum += buf[i];}return sum;
}

GetIntArrayRegion的第三个参数0表示arr的起始索引,第四个参数10表示要拷贝的元素个数.

(ii)获取基本元素数组的指针:

GetIntArrayElements/ReleaseIntArrayElements

JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
{jint *carr;jint i, sum = 0;carr = (*env)->GetIntArrayElements(env, arr, NULL);if (carr == NULL) {return 0; /* exception occurred */}for (i=0; i<10; i++) {sum += carr[i];}(*env)->ReleaseIntArrayElements(env, arr, carr, 0);return sum;
}

(2)对象数组

获取/设置对象数组:

GetObjectArrayElement/SetObjectArrayElement

JNIEXPORT jobjectArray JNICALL Java_ObjectArrayTest_initInt2DArray(JNIEnv *env,jclass cls,int size)
{jobjectArray result;int i;jclass intArrCls = (*env)->FindClass(env, "[I");        //int[]!!!if (intArrCls == NULL) {return NULL;         /* exception thrown */}result = (*env)->NewObjectArray(env, size, intArrCls,NULL);if (result == 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;jintArray iarr = (*env)->NewIntArray(env, size);if (iarr == NULL) {return NULL;     /* out of memory error thrown */}for (j = 0; j < size; j++) {tmp[j] = i + j;}(*env)->SetIntArrayRegion(env, iarr, 0, size, tmp);(*env)->SetObjectArrayElement(env, result, i, iarr);(*env)->DeleteLocalRef(env, iarr);
}return result;
}

如上代码创建一个二维数组,如果size设置为3,二维数组如下:

0 1 2

1 2 3

2 3 4

参考资料:

[1]The Java™ Native Interface Programmer’s Guide and Specification.pdf

这篇关于Accessing Arrays的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093770

相关文章

JavaScript - First step - Arrays

创建数组 任何类型的对象,都可以放入数组中。 var shopping = ['bread', 'milk', 'cheese', 'hummus', 'noodles'];shopping;// (5) ["bread", "milk", "cheese", "hummus", "noodles"]var sequence = [1, 1, 2, 3, 5, 8, 13];var ra

LeetCode --- Median of Two Sorted Arrays

第一次在csdn上写备忘录,以前一直是在笔记本上写,主要是笔记本上可以随意写,只要自己能看懂,在网页上多少都受些限制,另外一方面也是想锻炼下写作能力,为以后的论文做基础吧!最近偶尔上leetcode练些题目,所以也就以这个为主题写一篇试试看,因为能力不足,理解或言辞上会有错误,还望访者不吝赐教,我定当万分感激。 好了,废话也说完了,现在进入正题: 题目: There are two sor

Leetcode207: Median of Two Sorted Arrays

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 该方法的核心是将原问题转变成一个寻找第k小数的问

JAVA 一篇文章让你学会Arrays方法

一、常用方法 Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索) 1)toString 返回数组的字符串形式 Arrays.toString(arr) 2)sort 排序(自然排序和定制排序) Integer arrl= {1,-1,7,0,89}; 3)binarySearch 通过二分搜索法进行查找,要求必须排好序 int index = Arrays.b

C.Interface.And.Implementations—dynamic arrays的实现

1、An  array  is a homogeneous sequence of values in which the elements in the sequence are associated one-to-one with indices in a contiguous range.  2、Arrays in some form appear as built-in data typ

第四题:求两个有序数组的中位数(Median of Two Sorted Arrays)

题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2,请你找出这两个有序数组的中位数。 示例: 输入:nums1 = [1, 3], nums2 = [2] 输出:2.0 输入:nums1 = [1, 2], nums2 = [3, 4] 输出:2.5 要求: 你必须在对数时间复杂度 O(log(min(m, n))) 内解决这个问题。 解题思路 二分

(LeetCode)Intersection of Two Arrays II --- 求交集,不去重

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return

(LeetCode)Intersection of Two Arrays --- 求交集

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return

Java数组05:Arrays类

本节内容视频链接:Java数组07:Arrays类讲解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p=57&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5        Java中的‌Array类是一个针对数组进行操作的工具类,‌提供了排序、‌查找等功能‌。‌以下是一些常用的Ar

java Arrays.fill方法介绍

Arrays.fill 是 Java 标准库中的一个方法,用于将数组中的所有元素设置为指定的值。它可以用于一维数组以及多维数组的填充。这个方法非常有用,当你需要快速初始化或重置数组时。 方法签名 // 用于填充一维数组public static void fill(int[] a, int val);// 用于填充指定范围内的一维数组public static void fill(int[