2012-07-30 75 views
-1

我有以下结构如何访问指向结构内数组的指针?

typedef struct { 
uint8 u8Status; 
uint64 u64IeeeAddrRemoteDev; 
uint16 u16NwkAddrRemoteDev; 
uint8 u8NumAssocDev; 
uint8 u8StartIndex; 

/* rest of the message is variable Length */ 
uint16* pu16NwkAddrAssocDevList; 
} ZPS_tsAplZdpIeeeAddrRsp; 

这里pNwkAddrAssocDevList是一个指向的16位网络地址的列表。

我使用这下面的代码段

ZPS_tsAplZdpIeeeAddrRsp p; 
/* this structure p is already filled by the system, i just need to access it*/ 
/* using for loop */ 
printf("%04x",p.pu16NwkAddrAssocDevList[i]); 

但我没有得到正确的值,它会返回一些内存地址。

任何人都可以帮助我解决这个问题吗?

+1

你在访问它之前是否初始化了p? – Deqing 2012-07-30 15:16:52

+0

是的,p是由另一个程序分配的,我已经测试了其他成员的结构,它们被正确分配,但数组引起了问题。 – 2012-07-30 15:20:27

+1

这里的代码在假设pu16NwkAddrAssocDevList指向的内存被正确分配并且索引i在正确的范围内的情况下是正确的。因此,如果这不会产生您期望的结果,那么我们需要更多关于如何分配内存的信息以及您为我使用的值。 – 2012-07-30 15:23:54

回答

0

这里作为pu16NwkAddrAssocDevList是一个指针。您需要在结构中添加另一个变量来定义pu16NwkAddrAssocDevList中的值的长度/否,例如int长度。一旦你有了长度,你可以通过循环访问pu16NwkAddrAssocDevList的值。

for (int i=0; i < p.length; i++) {

printf("%04x", p->pu16NwkAddrAssocDevList); 

    pu16NwkAddrAssocDevList++; 

}

这样你就可以轻松地重复直通存储在pu16NwkAddrAssocDevList值。