函數中結構體指針作爲形參修改指針地址

當函數的形參爲結構體指針,但是在函數中不僅修改指針指向的值,而且修改指針指向的地址

以下可以改變主函數中a的值,但是a指向的地址不會發生改變

struct student {
  int aa;
  int bb;
  student() {}
  student(int aa, int bb) : aa(aa), bb(bb) {}
};

void fun(student* a, student* b) {
  *a = *b;
}

int main() {
  student* a;
  a = new student();
  student b = student( 3, 4 );
  printf("%p\n", a);
  fun(a, &b);
  printf("%p\n", a);
  printf("%d\n", a->aa);
  return 0;
}

以下這種方式,不僅修改了a的值,而且改變了a指向的地址,指向了b

struct student {
  int aa;
  int bb;
  student() {}
  student(int aa, int bb) : aa(aa), bb(bb) {}
};

void fun(student** a, student* b) {
  *a = b;
}

int main() {
  student* a;
  a = new student();
  student b = student( 3, 4 );
  printf("%p\n", a);
  fun(&a, &b);
  printf("%p\n", a);
  printf("%d\n", a->aa);
  return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章