C Передача и подтверждение указателей в функциях - PullRequest
1 голос
/ 23 февраля 2020

Вот рассматриваемая функция. Почему x не изменяется, несмотря на наличие ссылки ptr на адрес памяти? Точно так же, почему у не меняется?

#include <stdio.h>


int func (int a, int *b)
{
  int *ptr = &a;
  *ptr += 5;
  ptr = b;
  *ptr -= 3;
  return a;
}

int main ()
{
  int x = 2;
  int y = 8;
  int ret = func (x, &y);
  printf ("x: %d\n", x);
  printf ("y: %d\n", y);
  printf ("ret: %d\n", ret);
  return 0;
}

Редактировать: да, у вас меняется. Сожалею.

1 Ответ

3 голосов
/ 23 февраля 2020
int func (int a, int *b)

'a' передается по значению. Внутри fun c () a имеет собственную выделенную память, поэтому все, что вы делаете с ней, не влияет на переданную переменную. 'B' - указатель на int, поэтому изменение данных по этому адресу все еще видно снаружи. сфера веселья c (). Следовательно, х не меняется, а у меняется.

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