const char ***是什么意思,它如何从C转换为Java?

时间:2015-03-04 13:24:03

标签: java c++ c jna

我正在使用 JNA C ++ 编写的DLL编写Java接口,以控制小型设备。

在翻译数据类型时,我遇到了

const char*** someVariable

有人可以向我解释这意味着什么以及如何在Java中重新创建?

我已阅读指针,我正在使用JNA文档将C ++类型映射到Java,但我找不到对末尾有三个星号的类型的引用。

这应该被解释为指向String数组的指针吗?

2 个答案:

答案 0 :(得分:5)

如果你知道指针的概念,

const char ***意味着它是一个三重指针,所以你可以这样想:

const char***--->const char**--->const char*--->const char

所以是的,它可以解释为指向字符串数组的指针,因为字符串数组可以解释为双指针。

让我们说a是一个字符串数组:

const char *a[15];

在这种情况下,**a将为您提供第一个字符串的第一个字符。

你可以声明:

const char ***b = &a;

在这种情况下***b将为您提供第一个字符串的第一个字符。

答案 1 :(得分:3)

大多数可能的解释是你应该传入一个指针的地址,并且在返回时,指针将是一个C字符串数组。

这不是唯一可能的解释,但可能是最可能的解释。如果本机签名还要求指向整数的指针,它将写入返回数组的长度,则尤其如此。

要在JNA中使用它:

PointerByReference pref = new PointerByReference();
IntegerByReference iref = new IntegerByReference();
nativeLib.call(pref, iref);
String[] strings = pref.getValue().getStringArray(0, iref.getValue());

如果未指定长度,JNA将查找标记字符串数组末尾的NULL值。