鱼C论坛

 找回密码
 立即注册
查看: 964|回复: 2

[已解决]初级函数问题

[复制链接]
发表于 2018-10-6 09:31:22 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

void swap(int x, int y);

void swap(int x, int y)
{
                int temp;
               
                printf("In swap, 互换前:x = %d, y = %d\n", x, y);
               
                temp = x;
                x = y;
                y = temp;
               
                printf("In swap, 互换后:x = %d, y = %d\n", x, y);
}

int main()
{
                int x = 3, y = 5;
               
                printf("In main, 互换前:x = %d, y = %d\n", x, y);
                swap(x, y);
                printf("In main, 互换后:x = %d, y = %d\n", x, y);
               
                return 0;
}

代入函数swap的数据经过计算后值不会改变吗?

第二个printf("In main, 互换后:x = %d, y = %d\n", x, y); 出来的结果还是3和5
最佳答案
2018-10-6 11:04:58
确实不会改变的,在swap函数内部,x、y的值确实被互换了,也就是swap内的两个printf的输出是互换成功的,但是swap函数结束后,在main函数不会有任何变化。
解决这个问题,可以把x、y设定为全局变量,swap函数直接改变x、y即可,不要再传参;另一种方法就是,传入x、y变量的内存地址,也就是传址。
之所以会有这个问题,是因为,在函数中,参数的值是无法改变的,但传址的话,地址无法改变,但可以间接利用地址,也就是取值的方式,修改变量的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-6 09:59:53 | 显示全部楼层
一个函数里面值和另外一个函数的值是互不相关的,哪怕是名字相同(他们就像两个名字相同的人,但是他们没有关系)

要用指针传参才行,指针传参传的的地址,那样就可以改变了

如果你想了解传参具体原理,推荐看小甲鱼的汇编视频,想当黑客必学汇编呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 11:04:58 | 显示全部楼层    本楼为最佳答案   
确实不会改变的,在swap函数内部,x、y的值确实被互换了,也就是swap内的两个printf的输出是互换成功的,但是swap函数结束后,在main函数不会有任何变化。
解决这个问题,可以把x、y设定为全局变量,swap函数直接改变x、y即可,不要再传参;另一种方法就是,传入x、y变量的内存地址,也就是传址。
之所以会有这个问题,是因为,在函数中,参数的值是无法改变的,但传址的话,地址无法改变,但可以间接利用地址,也就是取值的方式,修改变量的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 06:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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