从函数内部修改一个参数指向的对象是否符合标准?

问题描述 投票:0回答:1

如果一个函数修改了它接收到的一个指针指向的对象,那么在函数调用后,这个变化在调用者中是否可见?

单元a:

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标准为基础进行备份。

c function pointers parameters language-lawyer
1个回答
2
投票

"我很确定是这样,但我希望能基于C标准进行备份。"

虽然这是一个很基本的问题(你可能已经知道了),但这里的引用可以提供你想要的完整的标准合规性。

ISOIEC 9899:2018(C18),"函数调用" 6.5.2.24(强调是我的)。


"一个参数可以是任何完整的对象类型的表达式。 在准备调用函数的过程中,对参数进行评估,并为每个参数分配相应参数的值.97)

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

© www.soinside.com 2019 - 2024. All rights reserved.