一.形如void Func(char* ptr)。
注意这里传进去的是指针的副本,本质上是传值的方式。在函数内部新建一个指针变量,再把ptr指向的值赋给局部指针变量。对局部变量本身地址的任何修改都不会影响到ptr。
1 int newInt=1; 2 3 void ChangeLoc(int* ptr) 4 { 5 ptr=&newInt; 6 } 7 8 int main() 9 { 10 int num=2; 11 int* ptr=# 12 cout<<ptr<<endl; 13 ChangeLoc(ptr); 14 cout<<ptr<<endl; 15 } 16 17 /* 18 结果: 19 2 20 2 21 */
二.如果要视图在局部变量中修改传入的形参的地址,可使用指针引用或指针的指针方法。
出处:http://www.cnblogs.com/li-peng/
展示一下使用指针的指针做为参数
void func(int **p) { *p = &m_value; // 也可以根据你的需求分配内存 *p = new int; **p = 5; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(&pn); cout << *pn <<endl; return 0; }
我们看一下 func(int **p)这个方法
再看一下指针的引用代码
int m_value = 1; void func(int *&p) { p = &m_value; // 也可以根据你的需求分配内存 p = new int; *p = 5; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(pn); cout << *pn <<endl; return 0; }
看一下func(int *&p)方法
三.effective c++:条款31---千万不要返回局部对象的引用, 不要返回函数内部用new初始化的指针的引用
1 char* out() 2 { 3 /*wrong*/ 4 5 /*version1 6 char* array=new char[10]; 7 cin>>array; 8 return array; 9 */ 10 11 /*version2 12 string k="hello,world"; 13 return k; 14 */ 15 16 }
原文:http://www.cnblogs.com/lsr-flying/p/4488945.html