Вложенная структура с массивом структурных указателей - PullRequest
0 голосов
/ 02 февраля 2012

Основная структура

typedef struct {
   uint8 u8Status;
   uint8 u8NeighborTableEntries;
   uint8 u8StartIndex;
   uint8 u8NeighborTableListCount;
   /* Rest of the message is variable length */
   ZPS_tsAplZdpDiscNtEntry* pNetworkTableList;
                                              //pNetworkTableList is a pointer to 
                                              //the first   
                                              //entry in the list of reported
                                              //Neighbour table entries
 } ZPS_tsAplZdpMgmtLqiRsp;


typedef struct
{
   uint64 u64ExtPanId;
   uint64 u64ExtendedAddress;
   uint16 u16NwkAddr;
   uint8 u8LinkQuality;
   uint8 u8Depth;
   union
   {
     struct
     {
       unsigned u2DeviceType:2;
       unsigned u2RxOnWhenIdle:2;
       unsigned u2Relationship:3;
       unsigned u1Reserved1:1;
       unsigned u2PermitJoining:2;
       unsigned u6Reserved2:6;
    } ;
    uint8 au8Field[2];
 } uAncAttrs;
} ZPS_tsAplZdpDiscNtEntry;

Я определил указатель ZPS_tsAplZdpMgmtLqiRsp *;

все в порядке ..

pointer->u8Status
pointer->u8NeighborTableEntries
pointer->u8StartIndex
pointer->u8NeighborTableListCount

но как я могу получить доступ к этим значениямвнутри структуры ZPS_tsAplZdpDiscNtEntry

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

У вас есть указатель, но у вас нет экземпляра самой структуры. Сделайте следующее:

ZPS_tsAplZdpMgmtLqiRsp *pointer = (ZPS_tsAplZdpMgmtLqiRsp *)malloc(sizeof(ZPS_tsAplZdpMgmtLqiRsp));

... и да, вы также должны выделить память для pNetworkTableList:

pointer->pNetworkTableList = (ZPS_tsAplZdpDiscNtEntry *)malloc(sizeof(ZPS_tsAplZdpDiscNtEntry));

тогда вы можете

до

 pointer->pNetworkTableList->u8Status = 12; 

и т. Д.

не забудьте сделать

free(pointer->pNetworkTableList);
free(pointer);

в конце работы.

0 голосов
/ 02 февраля 2012

вы получаете доступ к массиву с помощью: pointer->pNetworkTableList так что оттуда вы можете получить доступ ко всем элементам структуры ..

например. доступ к u64ExtPanId элемента с индексом 0:

pointer->pNetworkTableList[0].u64ExtPanId = 1232;
...