如何在 NDK 中计算 C 中的输入 int 数组

How to calculate a input int array in C in NDK

我正在通过 NDK 研究 Android 应用程序中的 C 用法。在我的第一次尝试中,我想传递一个 java int 数组作为 C 函数中的参数。项目编译,我没有任何编译问题。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Sample s=new Sample();
        int[] b={1, 2, 3};
        int a=s.sum(b);
        Log.i("aa","sum= "+a);

    }


public class Sample {

    static {
        System.loadLibrary("sample");
        Log.i("a", "Load sample");
    }

    public native int somma(int[] b);
}
#include <jni.h>
#include "sample.h"  // Generated

JNIEXPORT jint JNICALL
Java_com_example_myapplication_Sample_somma(JNIEnv *env, jobject instance, jintArray b_) {
    jint *b = (*env)->GetIntArrayElements(env, b_, NULL);

    size_t n = sizeof(b_) / sizeof(jint);
    jint result=0;

    for (int i=0;i<n;i++) {
        result+=(*b);
        b++;
    }

    (*env)->ReleaseIntArrayElements(env, b_, b, 0);

    return result;

}

问题出在 size_t n = sizeof(b_) / sizeof(jint); 指令上。如何确定数组 b_ 的元素个数?

提前致谢。

您可以通过 GetArrayLength 获得数组的长度:

jsize arrayLength = (*env)->GetArrayLength(env, b_);