0

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

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)它没有打印正确的值。

4

1 回答 1

0

->期望 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. 那是一个单一的指针。只取消引用一次。

于 2013-10-21T17:31:22.193 回答