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;
}
} # 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;
} arrang 函数通过指针传过来的是值,你交换的是地址,这是其一;你定义的函数是 void 类型,它是无返回值的,这是其二,有了此两点,你定义的函数是无法达到你想要的交换目的。
我上面的函数是进行值交换,所以,你可以将函数类型由 int 型改为 void 型,若改为 void 类型,第 25 行就要去掉,理由还 void 类型无返回值 风过无痕1989 发表于 2020-10-7 08:51
arrang 函数通过指针传过来的是值,你交换的是地址,这是其一;你定义的函数是 void 类型,它是无返回值的 ...
那如果是址交换,问题出在什么地方 122953129 发表于 2020-10-7 12:29
那如果是址交换,问题出在什么地方
址交换,当然是达不到你想要的效果啦。比如:1301号房间里住着房客张三,1302号房间里住着李四,你将1301号、1302号两个号码摘下来,交换了一下,你到1301号房间仍然是找不到张三的,对吧? 风过无痕1989 发表于 2020-10-7 12:36
址交换,当然是达不到你想要的效果啦。比如:1301号房间里住着房客张三,1302号房间里住着李四,你将1301 ...
有道理{:5_106:} https://s1.ax1x.com/2020/10/07/0asN0H.jpg
但是,这一题怎么解释?
122953129 发表于 2020-10-7 13:10
但是,这一题怎么解释?
是当调用函数的时候不能用址传递吧? 本帖最后由 风过无痕1989 于 2020-10-7 14:45 编辑
122953129 发表于 2020-10-7 13:11
是当调用函数的时候不能用址传递吧?
调用函数有三种方式:1、用变量名作为函数的形参;2、用数组名(实际上就是地址)作为函数的形参;3、用指针作为函数的形参。
当然可以传递地址 ! 你这一题,没有调用函数,是直接在主函数里输出的,这又好比,你在调换房间号码时,叫那个张三,你站到我的左边来,李四你站到右边来,然后,你就将房间号码给换了
在上一题里,你虽然通过指针将变量的地址传递到了子函数里,但在实际交换时使用的是变量名进行交换。要知道和注意的是:主函数中的变量名与子函数里的变量名可以是相同的,但它们却是毫无关系的两个变量,再举个例子来说:住在解放路有一个叫王国庆的人,住在长江路也有一个叫王国庆的人,虽然这两人都叫王国庆,但他们却是两个不相干的人
页:
[1]