访问结构的双指针

我正在尝试使用以下结构指针构建数据包

typedef struct address { unsigned char *mac_destn_addr; unsigned char *mac_src_addrl }address_t; typedef struct frame { address_t *eth_addr; unsigned char *payload; unsigned int *crc32; }frame_t; typedef struct eth_ctrl { unsigned char *no_of_pkt; unsigned short *delay; frame_t **eth_frame; }eth_ctrl_t; address_t *adr; frame_t *frame; eth_ctrl_t *control; void main(int argc, char *argv[]) { adr = malloc(sizeof(address_t)); frame = malloc(sizeof(frame_t)); control = malloc(sizeof(eth_ctrl_t)); frame->eth_addr = adr; control->eth_frame = &frame; printf("CRC32 : 0x%x\n", (*control)->eth_frame->crc32); } 

它打印crc32变量的地址。 我需要打印该地址的值。 我尝试使用*(*control)->eth_frame->crc32**(control->eth_frame->crc32)它不会输出正确的值。

->期望LHS是一个指针,因此任何以(*control)->开头的东西都可以保证做一些奇怪的事情,因为control只是一个指针。

我想你想要:

 *(*control->eth_frame)->crc_32 

或者可能只是

 *control->eth_frame[0]->crc_32 

换一种说法:

controleth_crtl_t*

control->eth_frame是一个frame_t**

*control->eth_frame是一个frame_t*

(*control->eth_frame)->crc_32unsigned int*

*(*control->eth_frame)->crc_32unsigned int

control是一个指针。 取消引用它,并采用名为eth_frame的元素。 那是一个双指针。 取消引用它,再次取消引用它,并采用名为crc_32的元素。 那是一个单指针。 仅取消引用一次。