对指针传参的深入思考,很重要的一点还是需要看指针是否指向新的地址
1.如果指向新的空间,那么对形参处理后不会影响实参,即参数没有传回,因为实参的指针地址和形参指针的地址不同,对不同空间操作怎么会一样呢?
2.如果只是改变形参指针指向的内容,即形参的地址与实参保持一致,那么实际是对同一片空间操作,形参改变会传给实参。
总之一句话:需要看形参是否指向新的地址
最后附上代码以便理解:
情况一:
pp的值仍为10;
void func(int *p)
{
int a = 2;
p = &a;//形参p指向新的地址,和实参指向不同
}
void main()
{
int a = 10;
int *pp = &a;
func(pp);
while (true)
{
}
}
情况二:
pp的值为2;
void func(int *p)
{
int a = 2;
*p = a;//形参p旧的地址,和实参指向一样只是修改其内容
}
void main()
{
int a = 10;
int *pp = &a;
func(pp);
while (true)
{
}
}