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