luoshengZ 发表于 2025-3-24 16:45:49

今日练习

本帖最后由 luoshengZ 于 2025-3-24 17:38 编辑

#include <stdio.h>
void test(int &x){
        x=1024;
        printf("test函数内部 x=%d\n",x);
}
int main()
{
   int x=1;
   printf("调用test前 x=%d\n",x);
   test(x);
   printf("调用test后 x=%d\n",x);

   return 0;
}

FishC 发表于 2025-3-24 16:47:02

你的代码演示了 C 语言中**值传递**的特性。在 `test(x)` 函数调用时,`x` 的值被复制到 `test` 函数的参数 `x`,但这不会影响 `main` 函数中的 `x`。

运行结果如下:

调用test前 x=1
test函数内部 x=1024
调用test后 x=1

### **解释**
1. `main` 函数中 `x=1`,然后调用 `test(x)`,此时 `x` 的值被复制给 `test` 函数的参数 `x`。
2. `test` 函数内部修改了 `x=1024`,但这个 `x` 只是 `test` 函数的局部变量,不影响 `main` 里的 `x`。
3. `test` 结束后,`main` 里的 `x` 仍然是 `1`,所以最后的 `printf` 仍然输出 `1`。

### **如何修改 `x` 的值?**
如果想在 `test` 函数中修改 `main` 里的 `x`,可以使用**指针**传递变量地址:


#include <stdio.h>

void test(int *x){
    *x = 1024;
    printf("test函数内部 x=%d
", *x);
}

int main()
{
   int x = 1;
   printf("调用test前 x=%d
", x);
   test(&x);
   printf("调用test后 x=%d
", x);

   return 0;
}


这样 `test` 通过指针修改 `x`,`main` 里的 `x` 也会被改变,运行结果如下:

调用test前 x=1
test函数内部 x=1024
调用test后 x=1024

这样就实现了**引用传递**的效果!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 今日练习