用指针先后输出a,b中的大数、小数,但是不改变a,b原本的值。问:这样写为什么不行?详情如下
用指针先后输出a,b中的大数、小数,但是不改变a,b本来的值。问:这样写为什么不行?详情如下:
我先分别用两个指针指向ab,如果a<b就将两个指针调换一下指向。
但是在maxf函数里已经将两个指针的指向调换了,回到主函数的时候,它们的指向又变回原样了,这是怎么回事呢?
#include<iostream>
using namespace std;
int main()
{
void maxf(int*,int*);
int *pointer1,*pointer2,a,b;
a=4;
b=6;
pointer1=&a;
pointer2=&b;
if(a<b)maxf(pointer1,pointer2);//这里不是已经调换了吗?
cout<<"max="<<*pointer1<<endl;//怎么这里输出的还是a的值呢?
cout<<"min="<<*pointer2<<endl;//输出的还是b的值。。。
return 0;
}
void maxf(int *p1,int *p2)
{
int *pt;
pt=p1;
p1=&*p2;
p2=pt;
}
------解决方案--------------------
这是值传递和地址传递的问题,你在maxf函数中只是改变了局部变量 p1和p2的指向并没有改变实参的两个指针的指向,所以会出现上述结果; 你可以改变*p1和*p2的值而不是改变它们的指向,就可以得到你想要的结果了!
------解决方案--------------------
说的很对,你也可以用指向指针的指针,两级指针作为函数的形参,那样就可以改变两个指针的指向了
------解决方案--------------------
LZ看看我写的,编译通过了。
------解决方案--------------------
你要修改的是指针,所以需要指针的指针。
我先分别用两个指针指向ab,如果a<b就将两个指针调换一下指向。
但是在maxf函数里已经将两个指针的指向调换了,回到主函数的时候,它们的指向又变回原样了,这是怎么回事呢?
#include<iostream>
using namespace std;
int main()
{
void maxf(int*,int*);
int *pointer1,*pointer2,a,b;
a=4;
b=6;
pointer1=&a;
pointer2=&b;
if(a<b)maxf(pointer1,pointer2);//这里不是已经调换了吗?
cout<<"max="<<*pointer1<<endl;//怎么这里输出的还是a的值呢?
cout<<"min="<<*pointer2<<endl;//输出的还是b的值。。。
return 0;
}
void maxf(int *p1,int *p2)
{
int *pt;
pt=p1;
p1=&*p2;
p2=pt;
}
c/c++
求助
------解决方案--------------------
这是值传递和地址传递的问题,你在maxf函数中只是改变了局部变量 p1和p2的指向并没有改变实参的两个指针的指向,所以会出现上述结果; 你可以改变*p1和*p2的值而不是改变它们的指向,就可以得到你想要的结果了!
------解决方案--------------------
说的很对,你也可以用指向指针的指针,两级指针作为函数的形参,那样就可以改变两个指针的指向了
------解决方案--------------------
LZ看看我写的,编译通过了。
#include<iostream>
using namespace std;
int main()
{
void maxf(int**,int**);
int *pointer1,*pointer2,a,b;
a=4;
b=6;
pointer1=&a;
pointer2=&b;
if(a<b)maxf(&pointer1,&pointer2);//这里不是已经调换了吗?
cout<<"max="<<*pointer1<<endl;//怎么这里输出的还是a的值呢?
cout<<"min="<<*pointer2<<endl;//输出的还是b的值。。。
return 0;
}
void maxf(int **p1,int **p2)
{
int **pt=new int*;
*pt=*p1;
*p1=*p2;
*p2=*pt;
}
------解决方案--------------------
你要修改的是指针,所以需要指针的指针。
void swap(int**a, int**b)
{
int* t = *a;
*a = *b;
*b = t;
}
int* a, *b;
//....
swap(&a, &b);