gpt4 book ai didi

C 传递对参数的引用

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:50 24 4
gpt4 key购买 nike

我在一些遗留 C 代码中遇到了以下问题:

typedef struct _somestruct_ {
/* .... */
} SomeStruct_t

static void do_one_thing(SomeStruct_t *pInput){
/* Do some read-only stuff with pInput */
}


static void do_many_thing(SomeStruct_t input){
do_one_thing(&input);
}

C 是否真的允许这样做,即使如果 do_one_thing 实际上被修改为写入 pInput 可能会爆炸?

最佳答案

这是完全合法的 C 代码。代码 do_one_thing(&input) 只是将参数的地址传递给函数 do_one_thing。这没有错。

即使 do_one_thing 写入 pInput 也不是问题。地址有效并指向可变值。进行更新没有错。考虑

typedef struct _somestruct_ {
int field;
} SomeStruct_t

static void do_one_thing(SomeStruct_t *pInput){
// Completely legal
pInput->field = 42;
}

static void do_many_thing(SomeStruct_t input){
do_one_thing(&input);
}

关于C 传递对参数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7838431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com