程序运行情况: Input the first number:9 Input the second number:6 numl=9,num2-6 min-6,max-9 程序说明: (1)第5行的f语句 如果*numl p>*num2p(即numl>num2),则交换 指针,使numl pa指向变量num2(较小值),num2p指向 变量numl(较天值)。 (2)printf("min=%d,max=%d n",*numl p. *num2p);语句:通过指针变量,间接访问变量 的值
程序运行情况: Input the first number:9←┘ Input the second number:6←┘ num1=9, num2=6 min=6, max=9 程序说明: (1)第5行的if语句 如果*num1_p>*num2_p (即num1>num2),则交换 指针,使num1_p指向变量num2(较小值),num2_p指向 变量num1(较大值)。 (2)printf(“min=%d, max=%d\n”, *num1_p, *num2_p); 语句:通过指针变量,间接访问变量 的值
本案例的处理思路是:交换指针变量umlp和 num2p的值,而不是变量numl和num2的值(变量numl和 num2并未交换,仍保持原值),最后通过指针变量输出 处理结果。 9.2.2指针变量作函数参数 1.指针变量,既可以作为函数的形参,也可以作函数 的实参。 2.指针变量作实参时,与普通变量一样,也是“值传 递”,即将指针变量的值(一个地址)传递给被调用函数 的形参(必须是一个指针变量)。 注意:被调用函数不能改变实参指针变量的值,但 可以改变实参指针变量所指向的变量的值
本案例的处理思路是:交换指针变量num1_p 和 num2_p的值,而不是变量num1和num2的值(变量num1和 num2并未交换,仍保持原值),最后通过指针变量输出 处理结果。 9.2.2 指针变量作函数参数 1.指针变量,既可以作为函数的形参,也可以作函数 的实参。 2.指针变量作实参时,与普通变量一样,也是“值传 递”,即将指针变量的值(一个地址)传递给被调用函数 的形参(必须是一个指针变量)。 注意:被调用函数不能改变实参指针变量的值,但 可以改变实参指针变量所指向的变量的值
[案例9.3]使用函数调用方式改写[案例9.2],要求实参为指针变量。 /*案例代码文件名:AL93.C*/ /*********************************************米********/ /*exchange(O功能:交换2个形参指针变量所指向的变量的值*/ /*形参:2个,均为指向整型数据的指针变量 */ /*返回值:无 * /学*****米**米**水*******米*******米***米*********************/ void exchange(int *pointer1,int *pointer2) int temp; temp=*pointer1,*pointer1=*pointer2,*pointer2-temp; /*主函数main0*/ mainO) int numl,num2; /*定义并初始化指针变量numl p和num2p*/ int *numl p=&numl,*num2 p=&num2;
[案例9.3] 使用函数调用方式改写[案例9.2],要求实参为指针变量。 /*案例代码文件名:AL9_3.C*/ /******************************************************/ /*exchange()功能:交换2个形参指针变量所指向的变量的值 */ /*形参:2个,均为指向整型数据的指针变量 */ /*返回值:无 */ /******************************************************/ void exchange(int *pointer1, int *pointer2) { int temp; temp=*pointer1, *pointer1=*pointer2, *pointer2=temp; } /*主函数main()*/ main() { int num1,num2; /*定义并初始化指针变量num1_p和 num2_p */ int *num1_p=&num1, *num2_p=&num2;
printf"Inputthe first number:")scanf%d",numl p); printf("Inputthe second number:") scanf("%d",num2_p); printf“numl=%d,num2=%dn”,numl,num2); if试*numl_p>*num2_p) /*即numl>num2)*/ exchange(numl_p,num2p);/*指针变量作实参*/ /*输出排序后的numl和num2的值*/ printf(“min=%d,max=%dn”,numl,num2); } [程序演示] 程序运行情况: Input the first number:9 Input the second number:6 numl-9,num2=6 min=6,max=9
printf(“Input the first number: ”); scanf(“%d”, num1_p); printf(“Input the second number: ”); scanf(“%d”, num2_p); printf(“num1=%d, num2=%d\n”, num1, num2); if( *num1_p > *num2_p ) /* 即num1>num2)*/ exchange(num1_p, num2_p); /*指针变量作实参*/ /*输出排序后的num1和num2的值*/ printf(“min=%d, max=%d\n”, num1, num2); } [程序演示] 程序运行情况: Input the first number:9←┘ Input the second number:6←┘ num1=9, num2=6 min=6, max=9
调用函数exchange(之前、之时、结束时和结束后的 情况,如图9-5所示。 形参指针变量pointer1(指向变量numl)和pointer2 (指向变量um2),在函数调用开始时才分配存储空间, 函数调用结束后立即被释放。 虽然被调用函数不能改变实参指针变量的值,但可以 改变它们所指向的变量的值。 总结:为了利用被调用函数改变的变量值,应该使用 指针(或指针变量)作函数实参。其机制为:在执行被 调用函数时,使形参指针变量所指向的变量的值发生变 化;函数调用结束后,通过不变的实参指针(或实参指 针变量)将变化的值保留下来
调用函数exchange()之前、之时、结束时和结束后的 情况,如图9-5所示。 形参指针变量pointer1(指向变量num1)和pointer2 (指向变量num2),在函数调用开始时才分配存储空间, 函数调用结束后立即被释放。 虽然被调用函数不能改变实参指针变量的值,但可以 改变它们所指向的变量的值。 总结:为了利用被调用函数改变的变量值,应该使用 指针(或指针变量)作函数实参。其机制为:在执行被 调用函数时,使形参指针变量所指向的变量的值发生变 化;函数调用结束后,通过不变的实参指针(或实参指 针变量)将变化的值保留下来