如果想通过函数调用得到n个要改变的值,可以采取下面的步骤:
①在主调函数中设n个变量,用n个指针变量指向它们;
②编写被调用函数,其形参为n个指针变量,这些形参指针变量应当与主调函数中的n个指针变量具有相同的基类型;
③在主调函数中将n个指针变量作实参,将它们的值(是地址值)传给所调用函数的n个形参指针变量,这样,形参指针变量也指向这n个变量;
④通过形参指针变量的指向,改变该n个变量的值;
⑤在主调函数中就可以使用这些改变了值的变量。
例如:
#include <iostream>
#include <windows.h>
using namespace std;
void swap1(int *a,int *b);
void swap2(int *a,int *b);
void main(){
int a=10,b=20,c,*p1,*p2;
p1=&a;
p2=&b;
cout<<DWORD(&(*p1))<<endl;//取得是指针变量p1的地址
cout<<DWORD(&(*p2))<<endl;
cout<<" p1= "<<*p1<<" - " <<DWORD(&(*p1)) <<" p2="<<*p2<<" - " <<DWORD(&(*p2)) <<endl;//&(*p1)取得是指针变量p1所指向存储单元即a的地址
swap2(p1,p2);
cout<<" p1= "<<*p1<<" - " <<DWORD(&(*p1)) <<" p2="<<*p2<<" - " <<DWORD(&(*p2)) <<endl;
c=getchar();
}
//实参指针变量的地址没有改变,只是修改了指针变量所指向存储单元的值。
void swap2(int *a,int *b){
int temp;
temp=*a;//取形参指针所指向变量的值,然后进行交换
*a=*b;
*b=temp;
}
//运行结果:
// 2031340
// 2031328
// p1= 10 - 2031376 p2=20 - 2031364
// p1= 20 - 2031376 p2=10 - 2031364
请注意,不能企图通过改变形参指针变量的值而使实参指针变量的值改变。请分析下面程序:
#include <iostream>
using namespace std;
int main( )
{ void swap(int *p1,int *p2);
int *pointer_1,*pointer_2,a,b;
cin>>a>>b;
pointer_1=&a;
pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
cout<<″max=″<<a<<″ min=″<<b<<endl;
return 0;
}
//调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
//简单说就是改变了p1所指向变量的值,即a的地址改变了,但是内容没有。
void swap(int *p1,int *p2)
{ int *temp;
temp=p1;
p1=p2;
p2=temp;
}