我们知道C语言中,对于函数参数的传指针操作本质上仍然是一个传值过程,只是将实参指针的值传递给了函数中的一个临时变量,实质上我们传入函数的只是一块内存的地址,而非指针本身。所以如果在函数中改变形参指针所指向的地址,实参指针的指向是不会被改变的。 如下图代码所示
void func(
int *p)
{
int *n = new
int;
*n =
3;
p = n;
}
int main() {
int n =
1;
int *p = &n;
cout<<
*p<<endl;
func(p);
cout<<
*p<<endl;
return 0;
}
运行结果
1
1
可见实参指针并没有被改变。
如果我们希望在函输中能够改变指针的指向,该怎么办呢?答案是使用指针的引用作为参数来传递。
void func(
int *&p) //此处使用指针的引用
{
int *n = new
int;
*n =
3;
p = n;
}
int main() {
int n =
1;
int *p = &n;
cout<<
*p<<endl;
func(p);
cout<<
*p<<endl;
return 0;
}
运行结果
1
3
可见实参的指向被改变了。