0

如果一个函数修改了它接收到的指针的对象,那么在函数调用之后调用者中是否可以看到该更改?

单元一:

void foo(int *bar) { *bar = 42; }

b单元:

extern void foo(int *bar);

void baz(void) {
   int qux = 0;
   foo(&qux);
   // Is qux guaranteed to be 42 now?
}

我很确定是这样,但我想根据 C 标准对其进行备份。

4

1 回答 1

2

我很确定它是,但我希望根据 C 标准对其进行备份。

尽管这是一个非常基本的问题(您可能已经知道),但这里是提供您想要的完整标准合规性的报价:

ISO/IEC 9899:2018 (C18),“函数调用”6.5.2.2/4(强调我的):


"参数可以是任何完整对象类型的表达式。在准备调用函数时,会计算参数,并为每个参数分配相应参数的值。97)

97) 函数可以更改其参数的值,但这些更改不会影响参数的值。另一方面,可以传递一个指向对象的指针,然后函数可以更改指向的对象的值。声明为数组或函数类型的参数被调整为具有 6.9.1 中所述的指针类型。"

于 2020-05-07T08:21:54.560 回答