#include<iostream>#include<string>using namespace std;
int foobar(int *pi=0){ int a=10; *pi=a; return *pi;}
int main(){ int *pi2=0; int ival=foobar(pi2); cout<<ival; return 0;}
int foobar(int *pi){int a=10;pi=&a;return *pi;}
int main(){int *pi2=0;int ival=foobar(pi2);
cout<<ival;system("pause");return 0;}
int foobar(int &pi){
int a=4;pi=a;return pi;}
int main(){int pi2;int ival=foobar(pi2);
cout<<ival<<endl;
return 0;}
2楼的老兄的疑问我也许可以回答一般情况下两种情况是等效的但是在这个程序中就不可以因为在主程序中的 int *pi2=0;并没有给pi2分配内存地址所以 在 int foobar(int *pi)函数中 *pi=a只是把a的值给pi pi仍没有被分配内存所以在执行的时候会出现错误 而pi=&a;相当于是为pi分配内存如果你一定要用 *pi=a这一句的话那么你要把int *pi2=0;改为int*pi2=new int; *pi2=0;这样就可以拉