我是C的新手。我的问题非常简单。以下是我的代码。我希望它将req_id增加1,然后输出1.然而,结果是0。
typedef uint32_t req_id_t;
typedef struct view_stamp_t{
req_id_t req_id;
}view_stamp;
struct consensus_component_t{
view_stamp highest_seen_vs;
};
typedef struct consensus_component_t consensus_component;
static void view_stamp_inc(view_stamp vs){
vs.req_id++;
return;
};
int main()
{
consensus_component* comp;
comp = (consensus_component*)malloc(sizeof(consensus_component));
comp->highest_seen_vs.req_id = 0;
view_stamp_inc(comp->highest_seen_vs);
printf("req id is %d.\n", comp->highest_seen_vs.req_id);
free(comp);
return 0;
}
答案 0 :(得分:4)
在C中调用函数时,参数按值传递,而不是通过引用传递。因此vs
中的view_stamp_inc
是comp->highest_seen_vs
的副本。增加副本中的req_id
对原始结构没有影响。
您需要传递结构的地址。
static void view_stamp_inc(view_stamp *vs) {
vs->req_id++;
return;
}
...
view_stamp_inc(&comp->highest_seen_vs);
答案 1 :(得分:2)
要将作为参数传递的原始对象更改为函数,应通过引用将其传递给函数。
例如
static void view_stamp_inc(view_stamp *vs){
vs->req_id++;
};
//...
view_stamp_inc( &comp->highest_seen_vs );