一.构建swap函数,实现两个整型变量数值的交换,且使用指针类型的数据作为swap函数的参数。
1.代码实现:
1 #include<stdio.h> 2 void swap(int *x,int *y) 3 { 4 int t; 5 t=*x; 6 *x=*y; 7 *y=t; 8 } 9 int main() 10 { 11 int a,b; 12 scanf("%d%d",&a,&b); 13 //输入要交换的两个整数a,b 14 printf("The old : a=%d b=%d ",a,b); 15 swap(&a,&b); 16 //交换a,b 17 printf("The now : a=%d b=%d ",a,b); 18 }
2.运行结果:
3 5
The old : a=3 b=5
The now : a=5 b=3
--------------------------------
Process exited after 2.629 seconds with return value 0
请按任意键继续. . .
总结: 1.先输入a,b两个整数,在将a,b的地址传入函数swap中,将a,b进行交换。
2.函数的参数必须是指针类型的,普通类型只能单向传递,指针类型可以实现双向传递。
二.void swap(int *p,int *q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换?
swap函数中指针变量m并未赋值,也就是说m指向的是内存中的一个未知区域,可能破坏系统的正常工作状况。其根本原因是没有对m初始化。
三.void swap(int *p,int *q){int *m;m=p;p=q;q=m;}为何无法实现交换?
C语言中实参变量和形参变量之间的数据传递是单向的值传递,指针变量也要遵循这一规则,但可以改变实参指针变量所指向变量的值。
四.构建comp函数,实现两个整数比较,比较大的值通过返回值返回给main。要求comp的参数和返回值都是指针类型数据。
1.代码实现
1 #include<stdio.h> 2 int *comp(int *x,int *y) 3 { 4 return *x>*y? x:y; 5 } 6 int main() 7 { 8 int a,b,*p; 9 scanf("%d%d",&a,&b); 10 p=comp(&a,&b); 11 printf("max=%d ",*p); 12 }
2.运行结果
2 6
max=6
--------------------------------
Process exited after 2.955 seconds with return value 0
请按任意键继续. . .
3.总结:在指针类型的函数中,利用指针所指向值的大小比较,来决定返回哪个指针参数,在main函数中用指针变量来接收该指针参数,最后用*p打印p所指向的值。