日期:2014-05-20  浏览次数:20732 次

java如何处理struct**
DLL中一个函数的出口参数是struct **,我是否可以理解成指向结构体数组的指针? 

他的返回值就是结构体数组的地址的指针? 
这样的话相当于我已知结构体数组的地址了,那么我怎么读取他的内容呢? 

我的代码如下:(假设函数是list(P1,P2))
......
PointerByRefernece pb = new PointerByReference();//用来获得结构体数组的地址指针
list(pa,pb);
Pointer temp = pb.getValue();//获得指针
TSubOrdinates.ByReference[] subOrdinates = null;
useArray.useMemory(pOrdinates);//此处出错
TSubOrdinates.ByReference[] temp = (TSubOrdinates.ByReference[]) useArray.toArray(subOrdinates);

请大家指教!!

------解决方案--------------------
struct **,这种表示是指向指针的指针,有两种理解:
1、如楼主所理解,是指向结构体数组的指针,也可以说是结构体二维数组。
2、是一个结构体指针数组。也就是说这个数组的元素是指向结构体的指针。

由于二维数组的第二维是要必需给出的,所以第1种理解不正确。你想啊,如果struct**是指向数组的指针,那数组是多大呢?如果这个对数是p,那么p+1应该移到什么地方?而理解为第二种情况就没有问题了,结构体指针的大小是确定的(指针就是一个地址,所以其占内存的大小和指针指向的数据类型无关),p+1就是下一个指针的存贮单元,这样这个struct**才有意义。

所以struct**应该理解为结构体指针数组。也就是说,p[i]里存放的是一个指向某个结构体的指针。