当前位置: 代码迷 >> C语言 >> [求助]经典100例中的一个问题
  详细解决方案

[求助]经典100例中的一个问题

热度:158   发布时间:2005-07-12 20:32:00.0
[求助]经典100例中的一个问题
【程序66】 题目:输入3个数a,b,c,按大小顺序输出。    1.程序分析:利用指针方法。 2.程序源代码: /*pointer*/ 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; } 我的问题是:swap(p1,p2) int *p1,*p2; {int p; p=*p1;*p1=*p2;*p2=p; } 这里我看不懂,swap是函数?swap(p1,p2);这一句又算什么?swap在前面没有声明怎么在 main()里就好用?请各位指点一下,谢了
搜索更多相关的解决方案: 经典  

----------------解决方案--------------------------------------------------------
main函数写在前面,, 就不用声明了!
swap当然是函数了,,,  swap(p1,p2)是指把p1和p2交换,,,
----------------解决方案--------------------------------------------------------
swap(p1,p2) int *p1,*p2; 就相当于swap(int *p1,int *p2), 这是函数定义的另一种方法,但是一般用后者。
----------------解决方案--------------------------------------------------------
以下是引用tary在2005-7-12 22:27:37的发言: main函数写在前面,, 就不用声明了! swap当然是函数了,,, swap(p1,p2)是指把p1和p2交换,,,
老师教你的么? PS:楼主那个swap函数干吗不写成: swap(int *p1,int *p2) {int p; p=*p1;*p1=*p2;*p2=p; } 这样不是更短更好看一些么

[此贴子已经被作者于2005-7-12 23:01:46编辑过]


----------------解决方案--------------------------------------------------------
main函数写在前面,, 就不用声明了????

错了!!相反。还有swap函数两种定义都可以,

swap(int *p1,int *p2)
{int p;
p=*p1;*p1=*p2;*p2=p;
}
比较容易理解!
----------------解决方案--------------------------------------------------------
谢谢楼上各位了,2楼的版主怎么也犯错误啊,这个程序是经典100例里边的,不是我编的,定义有2个方法我理解了,但是在main()函数里为什么没声明swap()?编译的时候也没错误?这我就不理解了
----------------解决方案--------------------------------------------------------
\是不是若用第二种,前面应用这个函数时要麻烦啊`~括号里要换成指针啊?




----------------解决方案--------------------------------------------------------
1.关于声明问题

ANSI C标准有两种版本,即俗称的C89 、C99。

  a .  C89中,如果定义的函数没有定义返回类型,将默认为返回int ,这个就是隐含的int 规则。

  b.   C89中,如果返回类型是int 的函数可以不声明。

  c.   C99标准废弃以上两条。

2。

swap(p1,p2)
int *p1,*p2;  //这种定义方式称为古典型,不建议使用,因为新的编译器可能不支持
{int p;
p=*p1;*p1=*p2;*p2=p;
}
----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------