请输入三个整数,求最大值

来源:百度知道 编辑:UC知道 时间:2024/06/04 02:15:16
下面是书上照抄的。
#include<stdio.h>
int *max(int a,int b,int c)
{
static int m1;//这里我不明白为什么要加static?
m1=(a>b)?a:b;
m1=(m1>c)?m1:c;
return(&m1);
}
main()
{
int a,b,c;
int *mp;
printf("\na,b,c=");
scanf("%d,%d,%d",&a,&b,&c);
mp=max(a,b,c);
printf("max=%d",*mp);
}

我觉得上面指针函数太复杂的,下面自己改成这样和上面哪种方法好。
#include<stdio.h>
int max(int a,int b,int c)//去掉了*
{
int m1;//去掉了static
m1=(a>b)?a:b;
m1=(m1>c)?m1:c;
return(m1);//去掉了&
}
main()
{
int a,b,c;
int mp;//去掉了*
printf("\na,b,c=");
scanf("%d,%d,%d",&a,&b,&c);
mp=max(a,b,c);
printf("max=%d",mp);//去掉了*
}

static 变量是一种静态变量,上面“static int m1;”中的static可以保证在函数“int *max(int a,int b,int c) ”调用结束时,它所占用的内存不被释放,否则你那调用的函数就没有用了,最好不要把函数定义 为指针型的,那样就不会太麻烦了。

main()
{
int n1,n2,n3;
int *pointer1,*pointer2,*pointer3;
printf("please input 3 number:n1,n2,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
pointer1=&n1;
pointer2=&n2;
pointer3=&n3;
if(n1>n2) swap(pointer1,pointer2);
if(n1>n3) swap(pointer1,pointer3);
if(n2>n3) swap(pointer2,pointer3);
printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3);
}
swap(p1,p2)
int *p1,*p2;
{int p;
p=*p1;*p1=*p2;*p2=p;
}

第二种简单点
static int m1 是申明一个静态变量,当所在函数被调用完了还在内存中,直到程序结束才释放内存