122953129 发表于 2020-10-7 08:27:32

C语言 这么写哪里错了?结果不对

输入两个数,从大到小输出
# 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;
                }
        }

风过无痕1989 发表于 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;
}

风过无痕1989 发表于 2020-10-7 08:51:38

arrang 函数通过指针传过来的是值,你交换的是地址,这是其一;你定义的函数是 void 类型,它是无返回值的,这是其二,有了此两点,你定义的函数是无法达到你想要的交换目的。

我上面的函数是进行值交换,所以,你可以将函数类型由 int 型改为 void 型,若改为 void 类型,第 25 行就要去掉,理由还 void 类型无返回值

122953129 发表于 2020-10-7 12:29:30

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

那如果是址交换,问题出在什么地方

风过无痕1989 发表于 2020-10-7 12:36:23

122953129 发表于 2020-10-7 12:29
那如果是址交换,问题出在什么地方

址交换,当然是达不到你想要的效果啦。比如:1301号房间里住着房客张三,1302号房间里住着李四,你将1301号、1302号两个号码摘下来,交换了一下,你到1301号房间仍然是找不到张三的,对吧?

122953129 发表于 2020-10-7 13:04:07

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

有道理{:5_106:}

122953129 发表于 2020-10-7 13:10:37

https://s1.ax1x.com/2020/10/07/0asN0H.jpg
但是,这一题怎么解释?

122953129 发表于 2020-10-7 13:11:58

122953129 发表于 2020-10-7 13:10
但是,这一题怎么解释?

是当调用函数的时候不能用址传递吧?

风过无痕1989 发表于 2020-10-7 14:29:46

本帖最后由 风过无痕1989 于 2020-10-7 14:45 编辑

122953129 发表于 2020-10-7 13:11
是当调用函数的时候不能用址传递吧?
调用函数有三种方式:1、用变量名作为函数的形参;2、用数组名(实际上就是地址)作为函数的形参;3、用指针作为函数的形参。

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

在上一题里,你虽然通过指针将变量的地址传递到了子函数里,但在实际交换时使用的是变量名进行交换。要知道和注意的是:主函数中的变量名与子函数里的变量名可以是相同的,但它们却是毫无关系的两个变量,再举个例子来说:住在解放路有一个叫王国庆的人,住在长江路也有一个叫王国庆的人,虽然这两人都叫王国庆,但他们却是两个不相干的人
页: [1]
查看完整版本: C语言 这么写哪里错了?结果不对