函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。
【例10-3】题目同【例10-2】,即输入的两个整数按大小顺序输出。今用函数处理,而且用指针类型的数据作函数参数。
view plaincopy to clipboardprint?
swap(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
main(){
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a
printf("\n%d,%d\n",a,b);
}
对程序的说明:
1) swap是用户定义的函数,它的作用是交换两个变量(a和b)的值。swap函数的形参p1、p2是指针变量。程序运行时,先执行main函数,输入a和b的值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。
2) 接着执行if语句,由于a
3) 接着执行执行swap函数的函数体使*p1和*p2的值互换,也就是使a和b的值互换。函数调用结束后,p1和p2不复存在(已释放)。
4) 最后在main函数中输出的a和b的值是已经过交换的值。请注意交换*p1和*p2的值是如何实现的。请找出下列程序段的错误:
view plaincopy to clipboardprint?
swap(int *p1,int *p2){
int *temp;
*temp=*p1; /*此语句有问题*/
*p1=*p2;
*p2=temp;
}
请考虑下面的函数能否实现实现a和b互换。
view plaincopy to clipboardprint?
swap(int x,int y){
int temp;
temp=x;
x=y;
y=temp;
}
如果在main函数中用“swap(a,b);”调用swap函数,会有什么结果呢?
【例10-4】请注意,不能企图通过改变指针形参的值而使指针实参的值改变。
view plaincopy to clipboardprint?
swap(int *p1,int *p2){
int *p;
p=p1;
p1=p2;
p2=p;
}
main(){
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a
printf("\n%d,%d\n",*pointer_1,*pointer_2);
}