当函数的形参为结构体指针,但是在函数中不仅修改指针指向的值,而且修改指针指向的地址
以下可以改变主函数中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;
}