首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问结构中结构的成员

访问结构中结构的成员
EN

Stack Overflow用户
提问于 2016-02-18 14:47:03
回答 2查看 35关注 0票数 1

我是C语言的新手,我的问题很简单。下面是我的代码。我期望它将req_id增加1,然后输出1。然而,结果是0。

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2016-02-18 14:54:21

在C中调用函数时,参数按值传递,而不是按引用传递。所以view_stamp_inc中的vscomp->highest_seen_vs的副本。在副本中递增req_id不会对原始结构产生影响。

您需要传递结构的地址。

代码语言:javascript
复制
static void view_stamp_inc(view_stamp *vs) {
    vs->req_id++;
    return;
}

...

view_stamp_inc(&comp->highest_seen_vs);
票数 4
EN

Stack Overflow用户

发布于 2016-02-18 14:53:52

要更改作为参数传递给函数的原始对象,应通过引用将其传递给函数。

例如

代码语言:javascript
复制
static void view_stamp_inc(view_stamp *vs){
    vs->req_id++;
};

//...

view_stamp_inc( &comp->highest_seen_vs );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35474643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档