15. 函数参数传递机制
1. 项目场景:
➢ 米粒对Jack Qiao说:“她在函数参数传递时,发现将一个变量传递给函数时,传递失败。”
2. 问题描述
➢ 举个栗子:用以下代码交换a, b的值,结果失败:
#include<stdio.h> void Swap(int x, int y) { int temp = 0; temp = x; x = y; y = temp; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); printf("交换之前的a=%d,b=%d\n", a, b); Swap(a, b); printf("交换后的a=%d,b=%d\n", a, b); return 0; }
➢ 失败的结果如下:
3. 原因分析:
➢ 在米粒的原始代码中,Swap 函数的参数是按值传递的。这意味着当你调用 Swap(a, b) 时,x 和 y 实际上是 a 和 b 的副本。因此,米粒在 Swap 函数内部对 x 和 y 的修改不会影响到 main 函数中的 a 和 b。
4. 解决方案:
➢ 通过传递变量的地址,可以在函数内部直接修改原始变量的值函数参数传递机制。
#include<stdio.h> void Swap(int* x, int* y) { int temp = 0; temp = *x; *x = *y; *y = temp; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); printf("交换之前的值:a=%d,b=%d\n", a, b); Swap(&a, &b); // 传递变量的地址 printf("交换之后的值:a=%d,b=%d\n", a, b); return 0; }
➢ 成功运行结果如下:
★ 总结:
☞ 指针传递:Swap 函数的参数是 int *x 和 int *y,表示它们是指向整数的指针。
☞ 修改原始变量:通过 *x 和 *y 访问并修改指针所指向的变量。
☞ 传递地址:在 main 函数中,通过 &a 和 &b 传递变量的地址。