如果一个函数修改了它接收到的一个指针指向的对象,那么在函数调用后,这个变化在调用者中是否可见?
单元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标准进行备份。"
虽然这是一个很基本的问题(你可能已经知道了),但这里的引用可以提供你想要的完整的标准合规性。
ISOIEC 9899:2018(C18),"函数调用" 6.5.2.24(强调是我的)。
"一个参数可以是任何完整的对象类型的表达式。 在准备调用函数的过程中,对参数进行评估,并为每个参数分配相应参数的值.97)
97)函数可以改变其参数的值,但这些改变不能影响参数的值。另一方面,可以将一个指针传递给一个对象,然后函数可以改变指向的对象的值。. 如6.9.1所述,声明为数组或函数类型的参数被调整为指针类型。"