1.以下函数无法将指针出参带出,因为修改的只是pi形参的值,实参值(main::pi)没有被修改,和传入一个int型原则上是没有区别的。
int val = 10; void foobar( int *pi ) { pi = &val; return; } void main() { int *pi = 0; foobar(pi); if (pi == 0) { std::cout << "pi is NULL."; } else { std::cout << "pi is:" << *pi; } return; }
pi is NULL.请按任意键继续. . .
2、方法可以是传入指针的引用,此时并没有创建形参pi,直接使用实参,和传入一个int型引用原则上是没有区别的。
int val = 10; void foobar(int *&pi) { pi = &val; return; } void main() { int *pi = 0; foobar(pi); if (pi == 0) { std::cout << "pi is NULL."; } else { std::cout << "pi is:" << pi; } return ; }
pi is:00412004请按任意键继续. . .
3、传入指针的指针,这个稍稍有些难理解,修改的是传入的指针的指向指针的值,所有可以带出。
int val = 10; void foobar(int **ppi) { *ppi = &val; return; } void main() { int *pi = 0; int **ppi = π foobar(ppi); if (*ppi == 0) { std::cout << "pi is NULL."; } else { std::cout << "pi is:" << *ppi; } return ; }
pi is:00412004请按任意键继续. . .