2012-07-30 108 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值。