访问struct中struct的成员

时间:2016-02-18 06:47:03

标签: c pointers struct reference

我是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;
}

2 个答案:

答案 0 :(得分:4)

在C中调用函数时,参数按值传递,而不是通过引用传递。因此vs中的view_stamp_inccomp->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 );