指针函数调用问题
#include <iostream>
using namespace std;
int *max(int a,int b,int c,int *p)
{
if (a>b && a>c)
{p=&a;}
else if (b>a && b>c)
{p=&b;}
else if (c>a && c>b)
{p=&c;}
return p; //这个函数返回指向最大数的指针
}
int main()
{
int x,y,z,m;
int *q;
cin>>x>>y>>z;
m=*(max(x,y,z,q));
cout<<m<<endl; //输出x,y,z中最大值
cout<<q<<endl; //输出指针q的内容
cout<<&x<<endl; //输出x的地址
system("pause") ;
return 0;
}
运行的时候,我输入3 2 1,依次赋给x y z。问题是:
输出的 q 的内容与 x 的地址不一样,这是为什么啊?指针 q 不就是存的三个数字中的最大值 x 的地址么??
想不通………………求解
[解决办法]
返回局部变量的地址,你想干什么?
[解决办法]
形参a,b,c作为临时变量,你居然还把指针p指向了这个临时变量。函数结束后,这个指针就没有用了,你想怎么办呢?
[解决办法]
#include <iostream>using namespace std;int* max(int *pa, int *pb, int *pc, int** pq){ int* pmax = *pa > *pb ? pa : pb; return *pq = *pmax > *pc ? pmax : pc; }int main(){ int x, y, z, m, *q; cin >> x >> y>> z; m = *(max(&x, &y, &z, &q)); cout << m << endl; cout << q << endl; cout << &x << endl;}
[解决办法]
指针p就相当于引用了,你还return他干嘛,多此一举