В чем разница между ссылками на указатели в функции - PullRequest
0 голосов
/ 30 апреля 2019

Я создаю функцию, которая изменяет переменную, чтобы она могла использоваться функцией, ссылающейся на нее (родительская функция?).

Есть ли разница между использованием '& x' по сравнению с использованием 'z'в коде ниже?

void changeX(int *p);

int main(void) {
  int x = 10;
  int *z = &x;
  changeX(z);
  // or
  changeX(&x);
  return 0;
}

void changeX(int *p){
  *p = *p + *p;
}

Вывод:

10
20
40

Оба дают одинаковый результат (меняют x одинаково), но есть ли неочевидная разница между ними?

1 Ответ

0 голосов
/ 30 апреля 2019

Первый вызов инициализирует параметр из аргумента z, т. Е. Значением аргумента является значение указателя z, которое было инициализировано как &x, значение указателя, которое указывает на объектx. Второй вызов инициализирует параметр из аргумента &x, который является значением указателя, указывающим на объект x.Между этими двумя вызовами нет функциональной разницы.В обоих случаях параметр p в функции будет иметь точно такое же значение, значение указателя, которое указывает на x, единственное отличие состоит в том, откуда это значение пришло в тот момент, когда функция была вызвана…

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