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