例8.4 编写函数order(int *a,int *b),使调用函数中的第一个实参总是存放两个数中较小的数,第二个数总是存放两个数中较大的数。
#include <stdio.h>
void swap(int *x1,int *x2)
{
int t;
t=*x1;
*x1=*x2;
*x2=t; /*swap函数交换两个变量的值*/
}
void order(int *a,int *b)
{
if(*a>*b)
swap(a,b); /*注:这里没有用&是因为a,b中存放的是地址*/
}
main()
{
int x,y;
printf("Enter x,y:");
scanf("%d%d",&x,&y);
printf("x=%d,y=%d\n",x,y);
order(&x,&y);
printf("x=%d,y=%d\n",x,y);
}
函数返回地址值
函数值的类型不仅可以是简单的数据类型,而且可以是指针类型。
例8.5 编写函数将主函数中变量i和j中存放较大数的那个地址作为函数值传回。
三、编程题
8.17请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。
#include <stdio.h>
void fun(int, int, int*, int*); //函数fun()的声明语句
int main(void)
{
int x = 0, y = 0;
scanf("%d%d", &x, &y); //读入x和y
fun(x, y, &x, &y); //调用fun()函数求两数之和和两数之差
//由于在fun函数中,将两数之和放在了x中,将两数之差放在了y中,所以输出时两数之和为x,两数之差为y
printf("两数之和为:%d, 两数之差为: %d\n", x, y);
return 0;
}
void fun(int x, int y, int* h, int* c)
{
*h = x + y;
*c = x - y;
}
8.18请编写函数,对传送过来的三个数选出最大数和最小数,并通过形参传回调用函数。
#include <stdio.h>
void fun(int, int, int, int*, int*); //函数fun()的说明语句
int main(void)
{
int a = 0, b = 0, c = 0, max = 0, min = 0;
scanf("%d%d%d", &a, &b, &c);
fun(a, b, c, &max, &min); //调用fun函数来求最大最小值
printf("最大的数为:%d, 最小的数为: %d\n", max, min);
return 0;
}
void fun(int a, int b, int c, int* max, int* min)
{
*max = a;
*min = a;
if (b > * max)
* max = b;
if (c > * max)
* max = c;
if (b < *min)
* min = b;
if (c < *min)
* min = c;
}