首先需要知道的一点,指针实际是也是一个变量,所以传入函数的指针是实参的一个副本,它拥有和实参一样的数据,即指针地址指向一样,那么他们可以操作同样的数据。但如果说要使用传参来分配内存就不可以了,因为分配的内存相当于给指针一片新的可操作内存区域。在函数内部分配只能保证副本地址拥有那些内存空间的控制权,而实参地址则无法拥有控制权。如果想让实参也获得控制权,则可通过指针的指针方法,将实参指针变量的地址传入,那么这个时候实参的地址就会改变,变成分配的内存的首地址,从而实现动态分配目的。
传递指针
void modifyPointer(int* p) {
int localVariable = 10;
p = &localVariable; // 修改的是 p 的副本,不会影响 main 中的 ptr
}
int main() {
int value = 5;
int* ptr = &value;
modifyPointer(ptr);
// ptr 依然指向 value,值为 5
return 0;
}
传递指针的指针
void modifyPointer(int** p) {
int localVariable = 10;
*p = &localVariable; // 修改 p 指向的内容,实际改变 main 中的 ptr
}
int main() {
int value = 5;
int* ptr = &value;
modifyPointer(&ptr);
// ptr 现在指向 localVariable,值为 10
return 0;
}