C 如何访问结构中数组的指针?

C 如何访问结构中数组的指针?,c,arrays,pointers,structure,C,Arrays,Pointers,Structure,我有以下结构 typedef struct { uint8 u8Status; uint64 u64IeeeAddrRemoteDev; uint16 u16NwkAddrRemoteDev; uint8 u8NumAssocDev; uint8 u8StartIndex; /* rest of the message is variable Length */ uint16* pu16NwkAddrAssocDevList; } ZPS_tsAplZdpIeeeAddrRsp; 此处

我有以下结构

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]);
但是我没有得到正确的值,它返回一些内存地址


有人能帮我解决这个问题吗?

这里的pu16NwkAddrAssocDevList是一个指针。您需要向结构中添加另一个变量来定义pu16NwkAddrAssocDevList中值的长度/编号,例如int length。获得长度后,可以通过循环访问pu16NwkAddrAssocDevList的值

for(inti=0;i

}


通过这种方式,您可以轻松迭代存储在pu16NwkAddrAssocDevList中的值。

在访问p之前是否初始化了p?是,p是由另一个程序分配的,我已经测试了结构中的其他成员,它们被正确分配,但数组是问题的根源。假设pu16NwkAddrAssocDevList指向的内存被正确分配,并且索引i在正确的范围内,那么这里的代码是正确的。因此,如果这没有产生您期望的结果,那么我们需要更多关于内存分配方式的信息,以及您对i使用的值。您说:“但是我没有得到正确的值,它返回一些内存地址。”。是什么让您觉得该值不正确?更重要的是:是什么让你认为它在打印“内存地址”?您是否在调试器中看到了结构中包含的值?您有权访问分配代码的位置吗?如果是,那么您是否看到了分配给那里的内容,并且确信您看到的值与分配给那里的值不同?最后一点注意:您如何知道存储了多少值?您说的是“16位网络地址”,这可能是endianness的问题吗?
    printf("%04x", p->pu16NwkAddrAssocDevList);

    pu16NwkAddrAssocDevList++;