鱼C论坛

 找回密码
 立即注册
查看: 935|回复: 8

[已解决]C语言 这么写哪里错了?结果不对

[复制链接]
发表于 2020-10-7 08:27:32 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
输入两个数,从大到小输出
# include <stdio.h>
int main()
{
        void arrang(int* x, int* y);
        int a, b;
        int* p, * q;
        scanf("%d %d", &a, &b);
        p = &a;
        q = &b;
        arrang(p, q);
        printf("%d %d", *p, *q);

}
                void arrang(int*x, int *y)
        {
                int *r;
                if (*x <= *y)
                {
                        r = x;
                        x = y;
                        y = r;
                }
        }
最佳答案
2020-10-7 12:36:23
122953129 发表于 2020-10-7 12:29
那如果是址交换,问题出在什么地方

址交换,当然是达不到你想要的效果啦。比如:1301号房间里住着房客张三,1302号房间里住着李四,你将1301号、1302号两个号码摘下来,交换了一下,你到1301号房间仍然是找不到张三的,对吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-7 08:40:47 | 显示全部楼层
# include <stdio.h>
int main()
{
    int arrang(int* x, int* y);
    int a, b;
    int* p, * q;
    scanf("%d %d", &a, &b);
    p = &a;
    q = &b;
    arrang(p, q);
    printf("%d %d", *p,*q);
        printf("\n");

}

int arrang(int*x, int *y)
{
    int r;
    if (*x >= *y)
    {
        r = *x;
        *x = *y;
        *y = r;
    }
        return *x,*y;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-7 08:51:38 | 显示全部楼层
arrang 函数通过指针传过来的是值,你交换的是地址,这是其一;你定义的函数是 void 类型,它是无返回值的,这是其二,有了此两点,你定义的函数是无法达到你想要的交换目的。

我上面的函数是进行值交换,所以,你可以将函数类型由 int 型改为 void 型,若改为 void 类型,第 25 行就要去掉,理由还 void 类型无返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 12:29:30 | 显示全部楼层
风过无痕1989 发表于 2020-10-7 08:51
arrang 函数通过指针传过来的是值,你交换的是地址,这是其一;你定义的函数是 void 类型,它是无返回值的 ...

那如果是址交换,问题出在什么地方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-7 12:36:23 | 显示全部楼层    本楼为最佳答案   
122953129 发表于 2020-10-7 12:29
那如果是址交换,问题出在什么地方

址交换,当然是达不到你想要的效果啦。比如:1301号房间里住着房客张三,1302号房间里住着李四,你将1301号、1302号两个号码摘下来,交换了一下,你到1301号房间仍然是找不到张三的,对吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-7 13:04:07 | 显示全部楼层
风过无痕1989 发表于 2020-10-7 12:36
址交换,当然是达不到你想要的效果啦。比如:1301号房间里住着房客张三,1302号房间里住着李四,你将1301 ...

有道理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 13:10:37 | 显示全部楼层

                               
登录/注册后可看大图

但是,这一题怎么解释?

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

使用道具 举报

 楼主| 发表于 2020-10-7 13:11:58 | 显示全部楼层
122953129 发表于 2020-10-7 13:10
但是,这一题怎么解释?

是当调用函数的时候不能用址传递吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-7 14:29:46 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-10-7 14:45 编辑
122953129 发表于 2020-10-7 13:11
是当调用函数的时候不能用址传递吧?

调用函数有三种方式:1、用变量名作为函数的形参;2、用数组名(实际上就是地址)作为函数的形参;3、用指针作为函数的形参。

当然可以传递地址 ! 你这一题,没有调用函数,是直接在主函数里输出的,这又好比,你在调换房间号码时,叫那个张三,你站到我的左边来,李四你站到右边来,然后,你就将房间号码给换了

在上一题里,你虽然通过指针将变量的地址传递到了子函数里,但在实际交换时使用的是变量名进行交换。要知道和注意的是:主函数中的变量名与子函数里的变量名可以是相同的,但它们却是毫无关系的两个变量,再举个例子来说:住在解放路有一个叫王国庆的人,住在长江路也有一个叫王国庆的人,虽然这两人都叫王国庆,但他们却是两个不相干的人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-10 05:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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