#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;
}
#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;
}
#include<iostream>
#include<string>
using namespace std;
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;
}
#include<iostream>
#include<string>
using namespace std;
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;
这样就可以拉