Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将结构成员传递给函数_C_Structure_Libevent - Fatal编程技术网

C 如何将结构成员传递给函数

C 如何将结构成员传递给函数,c,structure,libevent,C,Structure,Libevent,我需要使用libevent编写一个C代码。 这就是我希望做的事情。从stdin中,一个字符将在cb中通过。in_read_cb将发送至master_read_cb。然后,master_read_cb将发送到系统进行处理。这两个函数由libevent设置。因此,传递给它们的变量类型是固定的 void in_read_cb(struct bufferevent *bev, void *data) { //do something } void master_read_cb(struct buffe

我需要使用libevent编写一个C代码。 这就是我希望做的事情。从stdin中,一个字符将在cb中通过。in_read_cb将发送至master_read_cb。然后,master_read_cb将发送到系统进行处理。这两个函数由libevent设置。因此,传递给它们的变量类型是固定的

void in_read_cb(struct bufferevent *bev, void *data)
{
//do something
}

void master_read_cb(struct bufferevent *bev, void *data)
{
//do something
}
问题是,我需要将void*数据放入一个结构中,同时添加一个新变量作为开始处理时master_read_cb的标识符。它看起来像这样:

typedef struct _new_data
{
void *data;
int start;
} new_data;

void in_read_cb(struct bufferevent *bev, struct new_data->data)
{
//do something
//when it meets a condition, new_data->start = 1;
}

void master_read_cb(struct bufferevent *bev, struct new_data->data)
{
//check new_Data->start
//will sent the character for processing if start = 1
}

这是完全错误的,因为我是如何传递函数的。如何以正确的方式执行此操作?

您需要这样的操作,并将指向struct\u new\u数据的指针传递给它们:

void in_read_cb(struct bufferevent *bev, void *new_data_ptr)
{
    new_data *ndata = new_data_ptr;
    //do something
    //when it meets a condition, ndata->start = 1;
}

void master_read_cb(struct bufferevent *bev, void *new_data_ptr)
{
    new_data *ndata = new_data_ptr;
    //check ndata->start
    //will sent the character for processing if start = 1
}

只是从结构中传递数据成员?例如,结构新数据;in_read_cbu bev,data.data;如果需要更改结构的数据成员,即master\u read\u cbbev和您的\u struct\u instance->data,则传递一个void**。如果您只需要更改它指向的值,那么只需传递数据指针本身。哦,顺便说一下,不要使用带前导下划线的全局名称,这些名称由规范保留。@JoachimPileborg ok。谢谢你告诉我。我只是在以身作则。我需要传递结构的两个成员,因为master_read_cb需要检查start是1还是0。