首页 百科知识 指针变量作为函数参数

指针变量作为函数参数

时间:2022-10-03 百科知识 版权反馈
【摘要】:它的作用是将一个变量的地址传送到另一个函数中。今用函数处理,而且用指针类型的数据作函数参数。swap函数的形参p1,p2是指针变量。程序运行时,先执行main函数,输入a和b的值。接着执行if语句,由于a<b,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传递给形参变量。采取的依然是 “值传递”方式。这时p1和pointer_1指向变量a,p2和pointer_2指向变量b,如图10-9所示。

函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。

【例10.3】题目同例10.2,即输入的两个整数按大小顺序输出。今用函数处理,而且用指针类型的数据作函数参数。

voidswap(int*p1,int*p2)

{inttemp;

temp=*p1;

*p1=*p2;

*p2=temp;

main()

{inta,b;

int*pointer_1,*pointer_2;

scanf("%d,%d",&a,&b);

pointer_1=&a; pointer_2=&b;

if(a<b)swap(pointer_1,pointer_2);

printf("\n%d,%d\n",a,b);

对程序的说明:

swap是用户定义的函数,它的作用是交换两个变量 (a和b)的值。swap函数的形参p1,p2是指针变量。程序运行时,先执行main函数,输入a和b的值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b,如图10-8所示。

图10-8

接着执行if语句,由于a<b,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传递给形参变量。采取的依然是 “值传递”方式。因此虚实结合后形参p1的值为&a,p2的值为&b。这时p1和pointer_1指向变量a,p2和pointer_2指向变量b,如图10-9所示。

图10-9

接着执行执行swap函数的函数体,使*p1和*p2的值互换,也就是使a和b的值互换。

图10-10

函数调用结束后,p1和p2不复存在 (已释放),如图10-11所示。

图10-11

最后在main函数中输出的a和b的值是已经过交换的值。

请注意如何交换*p1和*p2的值。找出下列程序段的问题:

swap(int*p1,int*p2)

{int*temp;

*temp=*p1;

*p1=*p2;

*p2=temp;

考虑下面的函数能否实现a和b互换。

swap(intx,inty)

{inttemp;

temp=x;

x=y;

y=temp;

如果在main函数中用“swap(a,b);”调用swap函数,会有什么结果呢?请看图10-12所示。

图10-12

【例10.4】

voidswap(int*p1,int*p2)

{int*p;

p=p1;

p1=p2;

p2=p;

main()

{inta,b;

int*pointer_1,*pointer_2;

scanf("%d,%d",&a,&b);

pointer_1=&a; pointer_2=&b;

if(a<b)swap(pointer_1,pointer_2);

printf("\n%d,%d\n",*pointer_1,*pointer_2);

其中的问题在于不能实现图10-13所示的第四步图10-13(d)。

图10-13

注意:不能试图通过改变指针形参的值而使指针实参的值改变。

【例10.5】输入a,b,c三个整数,按大小顺序输出。

voidswap(int*pt1,int*pt2)

{inttemp;

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

voidexchange(int*q1,int*q2,int*q3)

{if(*q1<*q2)swap(q1,q2);

if(*q1<*q3)swap(q1,q3);

if(*q2<*q3)swap(q2,q3);

main()

{inta,b,c,*p1,*p2,*p3;

scanf("%d,%d,%d",&a,&b,&c);

p1=&a;p2=&b;p3=&c;

exchange(p1,p2,p3);

printf("\n%d,%d,%d\n",a,b,c);

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈