#include<stdio.h> int main() { void swap(int *a,int *b); //声明swap 函数 int a,b; //两个整型变量 int *p1,*p2; p1=&a; p2=&b; printf("please enter a and b:"); //输入提示 scanf("%d,%d",&a,&b); //输入 printf("after change:"); swap(p1,p2); //调用swap函数 } void swap(int *a,int *b) //定义为指针类型参数的 swap函数 { int i; i=*a; *a=*b; *b=i; printf("%d,%d\n",*a,*b); }
总结:应用带有指针型参数的函数时,应该前后仔细对照,一定要注意*的意义.注意swap函数的应用,调换的时候,
我刚开始调换的是地址,导致编译运行的时候传的是地址,应该是调换变量的数值.指针的应用特别具有灵活性,需要更加灵活的应用.
2.void swap(int *p,int*q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换?
#include<stdio.h> void swap(int *p,int *q) //定义函数,两个整型变量数值的交换 { int *m; //错误 *m=*p; *p=*q; *q=*m; } int main() { int a,b; //定义变量a,b scanf("%d,%d",&a,&b) ; //输入数,对a和b赋值 swap(&a,&b); //用swap交换a和b printf("a=%d b=%d",a,b); //输出交换后数值 return 0; }
答:m没有被初始化,随机取值,会导致swap函数无法进行正常交换.
3.void swap(int *p,int*q){int *m ;m=p;p=q;q=m;}为何无法实现交换?
#include<stdio.h> void swap(int *p,int *q) { int *m; m=p; p=q; q=m; printf("p=%x q=%x\n",p,q); } int main() { int a,b; scanf("%d,%d",&a,&b); swap(&a,&b); printf("a=%d b=%d\n",a,b); return 0;
总结:运行结果显示地址数值都没有变换,原因是因为是只通过调用函数让p和q指向了a和b,
却没有进行地址的交换,所以ab的值是不交换的.
4.构建comp函数,实现两个整形比较,比较大的值通过返回值返回给main.要求comp的参数和返回值都是指针类型数据.
#include<stdio.h> int comp(int *p1,int *p2)//定义comp函数 { if(*p1>*p2) //用if语句比较*p1和*p2 return *p1;// 如果*p1>*p2,则返回*p1的值 else return *p2;//否则返回*p2的值 } main() { int a=55;//定义a和b两个变量并且赋初值 int b=102; int max;//定义max函数 int *p,*q; p=&a;q=&b; max=comp(p,q); //输出最大值 printf("max=%d\n",max); return 0;
总结:先定义comp函数,然后定义两个变量a和b还有max函数,和两个指针*p和*q,令他们分别指向a和b,最后通过max函数比较得出a和b之间的最大值.
指针灵活多用,需要好好学习.