交换两个整形变量的数值
#include<stdio.h> int main() { void swap(int *a,int *b);//声明swap函数 int c,d; scanf("%d %d",&c,&d);//输入需要进行交换的整数 int *a1,*b1; a1=&c; b1=&d;//把两个整数的地址存放到指针里 swap(a1,b1);//用swap函数对数值进行交换 printf("%d %d\n",*a1,*b1); } void swap(int *a,int *b) //定义形参为指针的函数 { int t; t=*a; *a=*b; *b=t;//对形参的地址进行调换 }
85 96 96 85 -------------------------------- Process exited after 3.553 seconds with return value 0 请按任意键继续. . .
总结:
1> 一开始没有注意到交换函数里有关指针类型的交换,输出的值没有交换,后来又仔细看了看课本里的例题,发现指针的数值交换需要进行交换的是数值的地址,也就是把*a与*b当做数值来处理,不能去掉*号进行交换。
2> 需要在主函数中首先说明要使用的函数。
二、 void swap(int *p,int *q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换?
*m是指针变量m所指向的变量,但m中没有确定的值,所以m指向的单元是不确定的,如果对*m赋值有可能会破坏系统正常运行,所以不会交换成功。
三、void swap(int *p,int *q){int *m;m=p;p=q;q=m;}为何无法实现交换?
比如把a,b的值交换,*p是a的地址,*q是b的地址。
把a,b比作门牌号,*p,*q分别是两个房间的人,swap函数执行完后,只是让*p,*q交换了房间,但是门牌号a,b并没有改变。
所以该程序无法实现交换。
四、构建comp函数,实现两个整数比较,比较大的值通过返回值返回给main。要求comp的参数和返回值都是指针类型数据。
#include<stdio.h> int main() { int comp(int *a,int *b);//声明函数 int a1,b1,t; int *a2,*b2; scanf("%d %d",&a1,&b1);//输入需要比较的数值 a2=&a1; b2=&b1;//把数值的地址存放在指针中 t=comp(a2,b2); //用comp函数把最大值返回给t printf("%d\n",t); } int comp(int *a,int *b)//定义可以返回值的函数 { if(*a>*b) return("%d",*a); else return("%d",*b);//指针所代表的数值进行比较,输出最大值 }
85 963 963 -------------------------------- Process exited after 5.465 seconds with return value 0 请按任意键继续. . .
浙公网安备 33010602011771号