清华大学出版社 TSINGHUA UNIVERSITY PRESS 请注意,a和B并未交换,它们仍保持原值,但p1和 p2的值改变了。p1的值原为&a,后来变成&B, p2原值为&B,后来变成&a。这样在输出*p1和 *p2时,实际上是输出变量B和a的值,所以先输出 9,然后输出5。 这个问题的算法是不交换整型变量的值,而是交换 两个指针变量的值(即a和B的地址)
请注意,a和B并未交换,它们仍保持原值,但p1和 p2的值改变了。p1的值原为&a,后来变成&B, p2原值为&B,后来变成&a。这样在输出*p1和 *p2时,实际上是输出变量B和a的值,所以先输出 9,然后输出5。 这个问题的算法是不交换整型变量的值,而是交换 两个指针变量的值(即a和B的地址)
清华大学出版社 TSINGHUA UNIVERSITY PRESS 10.2.3指针变量作为函数参数 函数的参数不仅可以是整型、实型、字符型等数据, 还可以是指针类型。它的作用是将一个变量的地 址传送到另一个函数中。下面通过一个例子来说 明。 例10.3题目同例10.2,即对输入的两个整数按大小顺 序输出。 今用函数处理,而且用指针类型的数据作函数参数。 程序如下:
10.2.3 指针变量作为函数参数 函数的参数不仅可以是整型、实型、字符型等数据, 还可以是指针类型。它的作用是将一个变量的地 址传送到另一个函数中。下面通过一个例子来说 明。 例10.3题目同例10.2,即对输入的两个整数按大小顺 序输出。 今用函数处理,而且用指针类型的数据作函数参数。 程序如下:
清华大学出版社 TSINGHUA UNIVERSITY PRESS Swap(int *p1,int *p2) {int temp; temp=*p1; *pl=*p2; *p2=temp; } main( { int a,B; int*pointer-1,*pointer-2; scanf("%D,%D",&a,&B);
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);
清华大学出版社 TSINGHUA UNIVERSITY PRESS pointer-1=&a;pointer-2=&B; if(a<B)Swap(pointer-1,pointer-2); printf("\n%D,%DIn",a,B); 运行情况如下: 5,9 9,5 对程序的说明: Swap是用户定义的函数,它的作用是交换两个变量 (a和B)的值。Swap函数的两个形参pl、p2是指针 变量。程序运行时,先执行main函数
pointer-1=&a;pointer-2=&B; if(a<B) Swap(pointer-1,pointer-2); printf("\n%D,%D\n",a,B); } 运行情况如下: 5,9 9,5 对程序的说明: Swap是用户定义的函数,它的作用是交换两个变量 (a和B)的值。Swap函数的两个形参p1、p2是指针 变量。程序运行时,先执行main函数
清华大学出版社 TSINGHUA UNIVERSITY PRESS 输入a和B的值(今输入5和9)。然后将a和B的地址分 别赋给指针变量pointer-1和pointer-2,使pointer-l 指向a,pointer-2指向B,见图10.9(a)。接着执行if语 句,由于a<B,因此执行Swap函数。注意实参 pointer-.1和pointer-2是指针变量,在函数调用时, 将实参变量的值传送给形参变量。采取的依然是 “值传递”方式。因此虚实结合后形参p1的值为&a, p2的值为&B。见图10.9B)。这时pl和pointer-.1都指 向变量a,p2和pointer-2都指向B。接着执行Swap函 数的函数体,使*p1和*p2的值互换,也就是使a和B 的值互换。互换后的情况见图10.9(C)。函数调用结 束后,p1和p2不复存在(已释放),情况如图10.9D) 所示。最后在main函数中输出的a和B的值已是经过 交换的值
输入a和B的值(今输入5和9)。然后将a和B的地址分 别赋给指针变量pointer-1和pointer-2,使pointer-1 指向a,pointer-2指向B,见图10.9(a)。接着执行if语 句,由于a<B,因此执行Swap函数。注意实参 pointer-1和pointer-2是指针变量,在函数调用时, 将实参变量的值传送给形参变量。采取的依然是 “值传递”方式。因此虚实结合后形参p1的值为&a, p2的值为&B。见图10.9(B)。这时p1和pointer-1都指 向变量a,p2和pointer-2都指向B。接着执行Swap函 数的函数体,使*p1和*p2的值互换,也就是使a和B 的值互换。互换后的情况见图10.9(C)。函数调用结 束后,p1和p2不复存在(已释放),情况如图10.9(D) 所示。最后在main函数中输出的a和B的值已是经过 交换的值