啊涂涂 发表于 2018-10-6 09:31:22

初级函数问题

#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 09:59:53

一个函数里面值和另外一个函数的值是互不相关的,哪怕是名字相同(他们就像两个名字相同的人,但是他们没有关系)

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

如果你想了解传参具体原理,推荐看小甲鱼的汇编视频,想当黑客必学汇编呀

TyCk 发表于 2018-10-6 11:04:58

确实不会改变的,在swap函数内部,x、y的值确实被互换了,也就是swap内的两个printf的输出是互换成功的,但是swap函数结束后,在main函数不会有任何变化。
解决这个问题,可以把x、y设定为全局变量,swap函数直接改变x、y即可,不要再传参;另一种方法就是,传入x、y变量的内存地址,也就是传址。
之所以会有这个问题,是因为,在函数中,参数的值是无法改变的,但传址的话,地址无法改变,但可以间接利用地址,也就是取值的方式,修改变量的值。
页: [1]
查看完整版本: 初级函数问题