永发信息网

c语言高手请帮忙

答案:2  悬赏:30  手机版
解决时间 2021-04-12 13:25

#include <stdio.h>

void main()

{

int a=-1,b=1;

void f1(int x,int y),f2(int * x,int * y);

void f3(int * x,int * y),f4(int x,int y);

f1(a,b);

printf("(%d,%d)\n",a,b);

a=-1,b=1;

f2(&a,&b);

printf("(%d,%d)\n",a,b);

a=-1,b=1;

f3(&a,&b);

printf("(%d,%d)\n",a,b);

a=-1,b=1;

f4(a,b);

printf("(%d,%d)\n",a,b);

}

void f1(int x,int y)

{

int t;

t=x;x=y;y=t;

}

void f2(int * x,int * y)

{

int t;

t=*x; *x=*y; *y=t;

}

void f3(int * x,int * y)

{

int * t;

t=x;x=y; y=t;

}

void f4(int x,int y)

{

int *t=malloc(sizeof(t));

*t=x;x=y;y=*t;

}

问一下

为什么第一行输出(-1,1)

第二行输出(1,-1)

第三行输出(-1,1)

第四行输出(-1,1)

不都是交换吗?怎么是这答案?

请高手帮帮忙啊

最佳答案

只能告诉在传递过程中


有的传递的是数,在子函数和主函数中是不同的


有的传递的是指针,这样就会修改内存中的数据,主函数中的数据也就修改了

全部回答

参数传递方式为值传递,也就是说只把这个变量当前的值传给那个参数,参数可以用来做加减乘除等各种运算

但是因为传过来的只是一个值,我们如果只是用这些值作为一个中间值来运算的话本身不会产生什么错误,但是当我们要修改主函数中变量的值得话是无法做到的,因为我们没有对原来的那个变量做任何操作,只是用了一下它的值而已。

所以在C语言里面就有了指针(*),指针传递方式,就是传过来的是变量的地址,当对这个变量的地址中的值进行操作的时候就达到了双向的目的,就是当你修改的时候一起变化,而不仅仅是形式参数的值在变化,他会使形式参数对应的那个变量的值做相应的变化。

在C++语言里面还有一种引用传递方式(&),这种方式就很方便了,就是达到了信息互通的效果,我在这里做修改那里可以直接接收。也是一种双向的传值方式。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
二十三岁的你都拥有什么?
QQ飞车那个车队挑战比赛排名第一
白电王结局有什么意味
C The questions of what children learn, an
俊东副食店古镇NO.1在哪里啊,我有事要去这个
下了个视频,用暴风影音打开提示是7z压缩文件
人工养蛇越冬管理很关键
我是94年7.24出生,什么星座啊?
0x7c9308b3指令引用的0x00000347内
女孩子变坏会有人要吗?
谁知道豆豆韩士博参加挑战麦克风第三季是几号
是不是有些人有些事并不会因为时间的流逝而遗
侍庄在哪里啊,我有事要去这个地方
诺基亚5230河源地区卖多少钱?
写论文的稿纸什么样,来稿请用400字方格稿纸是
推荐资讯
为什么小便时那会痛
新出生小狗怎么打疫苗
潘氏女婴取名
单选题旋转餐厅多数位于摩天大厦或者高塔之顶
能考上清华大学的人都是怎样的
—How do you deal with their objections to
单选题下列关于鼠的作用的叙述不正确的是A.鼠
也是同学应怎么样用英文说?
医药职业道德的现状
电视剧《决胜》的演员表
周杰伦的歌好听吗可我总是听不懂歌词
怎么把自己制作的图片传到网上,供大家用
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?