访问结构的双指针
我正在尝试使用以下结构指针构建数据包
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
换一种说法:
control
是eth_crtl_t*
control->eth_frame
是一个frame_t**
*control->eth_frame
是一个frame_t*
(*control->eth_frame)->crc_32
是unsigned int*
*(*control->eth_frame)->crc_32
是unsigned int
control
是一个指针。 取消引用它,并采用名为eth_frame
的元素。 那是一个双指针。 取消引用它,再次取消引用它,并采用名为crc_32
的元素。 那是一个单指针。 仅取消引用一次。