const char*** 是什么意思,它如何从 C 翻译成 Java?
What does const char*** mean and how does it translate from C to Java?
我正在使用 JNA 为 C++ 编写的 DLL 编写 Java 接口,用于控制小型设备。
在翻译数据类型时我遇到了
const char*** someVariable
谁能给我解释一下这是什么意思以及如何在 Java 中重新创建它?
我已经阅读了有关指针的内容,我正在使用 JNA 文档将 C++ 类型映射到 Java,但我找不到对末尾带有三个星号的类型的引用。
这应该被解释为指向字符串数组的指针吗?
如果你知道指针的概念,
const char*** 表示是三重指针,所以可以这么想:
const char***--->const char**--->const char*--->const char
所以是的,它可以解释为指向字符串数组的指针,因为字符串数组可以解释为双指针。
假设 a
是一个字符串数组:
const char *a[15];
在这种情况下 **a
会给出 a.
中第一个字符串的第一个字符
您可以声明:
const char ***b = &a;
在这种情况下 ***b
会给出 a.
中第一个字符串的第一个字符
最可能的解释是,您应该传入一个指针的地址,而在return上,该指针将是一个 C 字符串数组.
这不是唯一可能的解释,但可能是最有可能的解释。如果本机签名还要求指向整数的指针,它将写入 returned 数组的长度,则尤其如此。
要从 JNA 使用它:
PointerByReference pref = new PointerByReference();
IntegerByReference iref = new IntegerByReference();
nativeLib.call(pref, iref);
String[] strings = pref.getValue().getStringArray(0, iref.getValue());
如果未指定长度,JNA 将查找标记字符串数组结尾的 NULL 值。
我正在使用 JNA 为 C++ 编写的 DLL 编写 Java 接口,用于控制小型设备。
在翻译数据类型时我遇到了
const char*** someVariable
谁能给我解释一下这是什么意思以及如何在 Java 中重新创建它?
我已经阅读了有关指针的内容,我正在使用 JNA 文档将 C++ 类型映射到 Java,但我找不到对末尾带有三个星号的类型的引用。
这应该被解释为指向字符串数组的指针吗?
如果你知道指针的概念,
const char*** 表示是三重指针,所以可以这么想:
const char***--->const char**--->const char*--->const char
所以是的,它可以解释为指向字符串数组的指针,因为字符串数组可以解释为双指针。
假设 a
是一个字符串数组:
const char *a[15];
在这种情况下 **a
会给出 a.
您可以声明:
const char ***b = &a;
在这种情况下 ***b
会给出 a.
最可能的解释是,您应该传入一个指针的地址,而在return上,该指针将是一个 C 字符串数组.
这不是唯一可能的解释,但可能是最有可能的解释。如果本机签名还要求指向整数的指针,它将写入 returned 数组的长度,则尤其如此。
要从 JNA 使用它:
PointerByReference pref = new PointerByReference();
IntegerByReference iref = new IntegerByReference();
nativeLib.call(pref, iref);
String[] strings = pref.getValue().getStringArray(0, iref.getValue());
如果未指定长度,JNA 将查找标记字符串数组结尾的 NULL 值。