一、swap函数的代码及运行情况
1.代码
1 #include<stdio.h> 2 int main() 3 { 4 void swap(int *m,int *n); 5 int a,b; 6 int *p1,*p2; 7 scanf("%d,%d",&a,&b); 8 p1=&a; 9 p2=&b; 10 swap(p1,p2); 11 printf("%d,%d\n",*p1,*p2); 12 return 0; 13 } 14 void swap(int *m,int *n) 15 { 16 int t; 17 t=*m; 18 *m=*n; 19 *n=t; 20 } 21 /* 22 第04行://对函数进行声明 23 第05行://定义两个整型变量 24 第06行://定义两个指针变量*p1,*p2 量 25 第07行://输入两个整形数据a,b第08行://令指针p1指向a 26 第09行://令指针p2指向b 27 第10行://执行函数p1,p2 28 第11行://输出交换后的值 29 第12行://结束 30 31 第16行://定义变量t,作用为交换变量 32 第17行://将*m赋值给t 33 第18行://将*n赋值给*m 34 第19行://将t赋值给*n 35 */
2.运行结果
(1)键入74,23:
文字
图片
(2)键入89,42:
文字
图片
二、comp函数的代码及运行情况
1.代码
2.运行结果
(1)键入78,15
文字
图片
(2)键入14,58
文字
图片
三、swap函数两种无法达到交换效果的分析
1.void swap(int *m,int *n){int *t;*t=*m;*m=*n;*n=*t;}无法实现交换的原因:
*t是指针变量t所指向的变量,但未给t进行赋值,t无确定的值,所以t指向了不可预见的地址。因此,不能将变量或整型地址的值直接赋给未经初始化指针。编译会完成,但无法运行。
2.void swap(int *m,int *n){int *t; t=m; m=n; n=t;}无法实现交换的原因:
仅仅将形式参数地址进行了交换,键入22,33,swap函数只是将两个实际数的地址不断的变换,并没有将两个实际参数中的值进行交换;即此种情况为:形参变化,实参未动,没有实际果。像旅馆住的人,只将房门号调换,人并没有进行调换。
四、总结(也包括代码的注释)
1.swap函数
主函数:声明函数---->定义变量---->输入数值---->取其地址---->执行函数---->显示数据---->结束语句
swap函数:定义交换变量---->将前一个形参指针赋给交整型换变量---->将后一个形参指针赋给前一个形参指针---->将整型交换变量赋给后一个形参指针需注意上文提到的两种无法达到交换效果的分析。
2.comp函数
语句中max=comp(p1,p2);printf("max=%d",max);可变为printf("max=%d",comp(p1,p2));所以主函数思路也为:
主函数:声明函数---->定义变量---->输入数值---->取其地址---->执行函数---->显示数据---->结束语句
comp函数:直接使return函数中嵌套运算符 (判断条件)?(成立时的执行):(不成立时的执行) 不仅可以起到判断的作用,而且直接将判断后得出的值返回给主函数,简洁明了,省去了大量操作中的纷繁复杂的步骤。
原文:http://www.cnblogs.com/1623025417qq/p/6618527.html