本文主要是介绍C语言中利用自定义函数来交换俩个变量的值 与 直接在主函数创建一个中间变量 这俩种方法的区别。形参与实参的联系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 直接在主函数创建一个中间变量来实现俩个变量的值的交换:
#include <stdio.h>
int main()
{int data1 = 0, data2 = 0;scanf_s("%d %d", &data1, &data2);int change = 0;change = data1;data1 = data2;data2 = change;printf("交换后的值为%d %d", data1, data2);return 0;
}
其结果为:
2. 自定义函数来实现俩个变量的值的交换:
#include <stdio.h>
void max(int x, int y);
int main(){int data1 = 0, data2 = 0;scanf_s("%d %d", &data1, &data2);max(data1, data2);printf("交换后的值为%d %d", data1, data2);return 0;
}
void max(int x, int y)
{int change = 0;change = x;x = y;y = change;
}
其结果为:
可以发现俩个数的值并没有发生交换
其原因为:
当实参传给形参的时候,形参是实参的一份临时拷贝,它会因此创建新的变量,所以对形参的修改不会影响实参
而且每个参数都是一个变量,
从地址的角度来看,其data1 与 data2 分别有各自的地址,而对于自定义函数来说,它会创建俩个不同于data1 与 data2 的俩个变量,这里的不同是指地址上的不同
解决方法:
将要交换俩个值的变量的地址传递给自定义函数中,
所以这就要求自定义函数中的参数类型是指针
#include <stdio.h>
void max(int* x, int *y);
int main(){int data1 = 0, data2 = 0;scanf_s("%d %d", &data1, &data2);max(&data1, &data2);printf("交换后的值为%d %d", data1, data2);return 0;
}
void max(int *x, int *y)
{int change = *x;//这里的change仍是一个中间变量,不是指针*x = *y;*y = change;
}
这篇关于C语言中利用自定义函数来交换俩个变量的值 与 直接在主函数创建一个中间变量 这俩种方法的区别。形参与实参的联系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!