鱼C论坛

 找回密码
 立即注册
查看: 772|回复: 5

[已解决]调用swap函数,交换主函数中变量x和y中的数据。

[复制链接]
发表于 2020-8-5 14:55:23 | 显示全部楼层 |阅读模式

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

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

x
调用swap函数,交换主函数中变量x和y中的数据。
#include<stdio.h>
void swap(int *,int *);
main()
{
int x=30,y=20;
printf("(1)x=%d  y=%d\n",x,y);
swap(&x,&y);
printf("(4)x=%d  y=%d\n",x,y);
}
void swap(int *a,int *b)
{int t;
printf("(2)a=%d  b=%d\n",*a,*b);
t=*a;  *a=*b;  *b=t;
printf("(3)a=%d  b=%d\n",*a,*b);
}
运程序行结果如下:
(1)x=30  y=20
  (2)  a=30  b=20
  (3)  a=20  b=30
  (4)x=20  y=30

    为什么(4)的值会改变
    通过传送地址的方式在被用函数中直接改变函数中的变量的值,我理解不了这句话,  
最佳答案
2020-8-5 15:05:19
假如你是按值传递参数的话,传入的将会是一个副本,你改副本的话,不会改本体。
但你要是按地址传递参数的话,传入的将会是一个地址,它不是副本,就是本体,
所以可以改本体。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 14:56:24 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-8-5 14:58 编辑
通过传送地址的方式在被用函数中直接改变函数中的变量的值


传过去swap函数中的参数是两个指针,指针指向的那个变量的内容,在swap中被重新赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 14:57:21 | 显示全部楼层
本帖最后由 zltzlt 于 2020-8-5 15:02 编辑

因为传送的是指向原变量的指针,在函数中修改指针指向的变量的值,而传值就相当于复制一份变量的值再传进函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 15:04:35 | 显示全部楼层
本帖最后由 sunrise085 于 2020-8-5 15:09 编辑

给你看一个我之前写的图
上半部分是值传递,
下半部分是址传递,也就是你的程序中的这种方式。
360截图20200805150847998.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 15:05:19 | 显示全部楼层    本楼为最佳答案   
假如你是按值传递参数的话,传入的将会是一个副本,你改副本的话,不会改本体。
但你要是按地址传递参数的话,传入的将会是一个地址,它不是副本,就是本体,
所以可以改本体。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 15:06:40 | 显示全部楼层
        swap() 接收到的是 2 个装有货物的盒子,它的工作就是将两个盒子里的货物进行对换。所以,你会看到,调用 swap() 之后,两个变量(x , y)的值发生了交换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 16:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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