鱼C论坛

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

比较大小

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

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

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

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

void swap(int *x,int *y)
{
        int t;
        if(*x<*y)
        {
                t=*x;
                *x=*y;
                *y=t;
        }
}
*******************************************************
*******************************************************
#include <stdio.h>
int main()
{
        void swap(int x,int y);
        int a,b;
        scanf("%d%d",&a,&b);
        printf("a=%d,b=%d\n",a,b);
        swap(a,b);
        printf("%d,%d\n",a,b);
        return 0;
}

void swap(int x,int y)
{
        int t;
        if(x<y)
        {
                t=x;
                x=y;
                y=t;
        }
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

那么第二种形式的值传递到调用函数,为什么在交换完后直接释放了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

void swap(int *x,int *y)
{
        int *t;
        t=x;
        x=y;
        y=t;
}
那么这个又是怎么回事呢。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

你在下面的函数里虽然交换了,a,b的值,但返回时,并没有带回主函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 16:38:03 | 显示全部楼层
我是来混的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 19:03:05 | 显示全部楼层
谢谢你们的回答。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 19:44:51 | 显示全部楼层
{:1_1:} never giveup
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-31 20:24:44 | 显示全部楼层
没V刊不多吧你们知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 23:39:38 | 显示全部楼层
dfddddddd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-2 16:58:14 | 显示全部楼层
函数的调用时采用值传递的方式,被掉函数和函数和主函数的联系只能是:实参传递给形参,和return语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-5 09:04:56 | 显示全部楼层
诶~~  你给复制给我个文件我修改之后对你的文件有影响么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 21:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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