InitPointer 函数**ptr不太理解

来源:7-7 动态内存分配【突破面试高频考点】

Jonnyshao

2022-08-14

void InitPointer(int **ptr, int length, int default_value) {
  *ptr = malloc(sizeof(int) * length);
  for (int i = 0; i < length; ++i) {
    (*ptr)[i] = default_value;
  }
}

int main() {
  int * players;
  //InitPointer(&players, PLAYER_COUNT, 0);
  players = calloc(PLAYER_COUNT, sizeof(int));
  for (int i = 0; i < PLAYER_COUNT; ++i) {
    PRINT_INT(players[i]);
    players[i] = i;
  }
  PRINT_INT_ARRAY(players, PLAYER_COUNT);

  players = realloc(players, PLAYER_COUNT * 2 * sizeof(int));
  PRINT_INT_ARRAY(players, PLAYER_COUNT * 2);

  if (players) {

    free(players);
  } else {

  }


  return 0;
}

老师 我有点笨,不太理这个**ptr 这个指针的指针最后指向哪里了?谢谢

写回答

1回答

bennyhuo

2022-08-14

 int * players;  InitPointer(&players, PLAYER_COUNT, 0);

注意看这两句,定义了一个 players 是一个指针,它本身也是一个变量,我们拿到它的地址,传给 InitPointer,这样在 InitPointer 里面,第一个参数也就是 **ptr 实际上指向的是 player 这个变量,我们通过 *ptr = ...  来修改 player 的值,这样实现对 player 的初始化。
0
2
bennyhuo
int ** 是&player的类型啊
2022-08-14
共2条回复

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2219 学习 · 853 问题

查看课程