鱼C论坛

 找回密码
 立即注册
查看: 1725|回复: 13

比较大小

[复制链接]
发表于 2015-3-31 09:09:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将a,b两个数按从大到小的顺序输出,为啥用第一种
指针形式可以实现,第二种形式不能实现呢。。。。
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         void swap(int *x,int *y);
  5.         int a,b;
  6.         int *p1,*p2;
  7.         scanf("%d%d",&a,&b);
  8.         printf("a=%d,b=%d\n",a,b);
  9.         p1=&a;
  10.         p2=&b;
  11.         swap(p1,p2);
  12.         printf("%d,%d\n",a,b);
  13.         return 0;
  14. }

  15. void swap(int *x,int *y)
  16. {
  17.         int t;
  18.         if(*x<*y)
  19.         {
  20.                 t=*x;
  21.                 *x=*y;
  22.                 *y=t;
  23.         }
  24. }
  25. *******************************************************
  26. *******************************************************
  27. #include <stdio.h>
  28. int main()
  29. {
  30.         void swap(int x,int y);
  31.         int a,b;
  32.         scanf("%d%d",&a,&b);
  33.         printf("a=%d,b=%d\n",a,b);
  34.         swap(a,b);
  35.         printf("%d,%d\n",a,b);
  36.         return 0;
  37. }

  38. void swap(int x,int y)
  39. {
  40.         int t;
  41.         if(x<y)
  42.         {
  43.                 t=x;
  44.                 x=y;
  45.                 y=t;
  46.         }
  47. }
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-31 09:34:38 | 显示全部楼层
如果需要更改内存地址中的内容,就得传指针,像int a这种只是传递内存地址中的内容的一份拷贝,所以不会改变它原有内存地址中的值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 09:41:08 | 显示全部楼层
形参传的是copy的值,指针传的是值。你debug一下就知道他为什么不对了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 09:42:05 | 显示全部楼层
Samples、懂么 发表于 2015-3-31 09:34
如果需要更改内存地址中的内容,就得传指针,像int a这种只是传递内存地址中的内容的一份拷贝,所以不会改变它 ...

那么第二种形式的值传递到调用函数,为什么在交换完后直接释放了呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 09:51:00 | 显示全部楼层
kitefall 发表于 2015-3-31 09:41
形参传的是copy的值,指针传的是值。你debug一下就知道他为什么不对了。
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         void swap(int *x,int *y);
  5.         int a,b;
  6.         int *p1,*p2;
  7.         scanf("%d%d",&a,&b);
  8.         printf("a=%d,b=%d\n",a,b);
  9.         p1=&a;
  10.         p2=&b;
  11.         if(a<b)
  12.         swap(p1,p2);
  13.         printf("%d,%d\n",a,b);
  14.         return 0;
  15. }

  16. void swap(int *x,int *y)
  17. {
  18.         int *t;
  19.         t=x;
  20.         x=y;
  21.         y=t;
  22. }
复制代码

那么这个又是怎么回事呢。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 10:19:25 | 显示全部楼层
生活灬着 发表于 2015-3-31 09:51
那么这个又是怎么回事呢。。。

由于参数传递采用传值方式, 因swap 函数不会影响到调用它的例程中的
参数 a 和 b 的值。该函数仅仅交换了 a 和 b 的副本的值。
swap(&a, &b);
由于一元运算符&用来取变量的地址,这样&a 就是一个指向变量 a 的指针。swap 函数的所有
参数都声明为指针,并且通过这些指针来间接访问它们指向的操作数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 10:30:40 | 显示全部楼层
参数传递是单向的!

你在下面的函数里虽然交换了,a,b的值,但返回时,并没有带回主函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 16:38:03 | 显示全部楼层
我是来混的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 19:03:05 | 显示全部楼层
谢谢你们的回答。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 19:44:51 | 显示全部楼层
{:1_1:} never giveup
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 20:24:44 | 显示全部楼层
没V刊不多吧你们知道
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 23:39:38 | 显示全部楼层
dfddddddd
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-2 16:58:14 | 显示全部楼层
函数的调用时采用值传递的方式,被掉函数和函数和主函数的联系只能是:实参传递给形参,和return语句
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-5 09:04:56 | 显示全部楼层
诶~~  你给复制给我个文件我修改之后对你的文件有影响么??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 18:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表