指针作函数参数,形参要求是指针变量,实参要求是指针类型数据。
函数调用时,将实参的值传递给形参,形参与实参得到相同的值。这时形参所指向的数据与实参所指向的数据共享存储单元,在函数中改变了形参所指向的数据,对应实参所指向的数据将同时改变,函数调用后带回多个值,如此在C语言中间接实现数据的双向传递。
请注意,利用指针作函数参数实现数据的双向传递不是指指针参数本身,而是指隐藏在指针后面的指针指向变量,指针参数本身依然是单向传值。
例将两个整数按从小到大的顺序输出。
先定义一个函数,用指针变量作参数,实现两个数的交换,然后在主函数中调用它,完成两个整数从小到大的顺序输出。 .
/*程序10一3,将两个整数顺序输出*/
void exchang(pl,p2)/*交换两个数*/
int*pl,*p2;
(int p;
p=*p1;*p1=*p2;*p2=p;/*结果通过*p1、*p2带回*/
main()
{int a,bl
int*r, *s;
scanf(”%d,%d”,&a,&b)}
r=&a;s=&b;
if(a>b)exchang(r,s);
printf(\",%d,%d\n”,a,b);
)
输入数据:9,4
运行结果:4,9
两点说明:
(1)若在函数中交换指针变量的值,实参r、s并不改变,指针参数亦是传值。例如:
int*p;
p=p1;p1=p2;p2=p;
不要希望如此完成处理。
(2)函数中交换值时不能使用无值的指针变量作临时变量。例如:
int*p;
*p=*p1; *p1=*p2; *p2=*p;
p无值,*p无意义。