Почему я не могу изменить указатель (переназначить его) в функции? - PullRequest
0 голосов
/ 12 июля 2020

Я изучаю указатель в функции. Когда я передаю указатель x в update (), я обнаружил, что не могу позволить ему указывать на другую память? Почему это происходит? Почему я не могу позволить x указывать на другую память в куче или стеке? Что делать, если я хочу достичь цели?

void update(int *x){
  int *a;
  a=malloc(sizeof(int));
  x=a;//x is still point to original a rather than memory
      // assigned by malloc()
  }
int main() {
  int a=4;
  int *b =&a;
  printf("%d ",*b);
  update(b);
  printf("%d ",*b);
  return 0;
}

Спасибо ~

1 Ответ

2 голосов
/ 12 июля 2020

Вы передаете значение указателя. Если вы хотите изменить этот указатель, вам необходимо передать указатель на указатель. Это то, что вы имеете в виду?

void update(int **x){
    int *a;
    a = malloc(sizeof(int));
    *x = a;
}
int main() {
    int a = 4;
    int *b = &a;
    printf("%d ", b);
    update(&b);
    printf("%d ", b);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...