Соответствует ли изменение объекта, на который указывает параметр, изнутри функции? - PullRequest
0 голосов
/ 07 мая 2020

Если функция изменяет объект, на который она получила указатель, отображается ли это изменение в вызывающей программе после вызова функции?

unit a:

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

unit b:

extern void foo(int *bar);

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

Я совершенно уверен, что это так, но я хотел бы иметь резервную копию на основе стандарта C.

1 Ответ

2 голосов
/ 07 мая 2020

" Я совершенно уверен, что это так, но я хотел бы иметь его резервную копию на основе стандарта C. "

Хотя это довольно простой c вопрос (как вы, наверное, уже знаете), вот цитата, обеспечивающая полное соответствие стандартам, которое вы хотели:

ISO / IEC 9899: 2018 (C18), " Вызов функций "6.5.2.2/4 (выделите мой):

" Аргумент может быть выражением любого полного типа объекта. При подготовке к вызову функции аргументы оцениваются, и каждому параметру присваивается значение соответствующего аргумента. 97)

97) Функция может изменять значения своих параметров, но эти изменения не могут повлиять на значения аргументов. С другой стороны, можно передать указатель к объекту, и функция может затем изменить значение объекта, на который указывает . Параметр, объявленный как имеющий тип массива или функции, корректируется так, чтобы иметь тип указателя, как описано в 6.9.1."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...