You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言函数传参疑问解析:为何输出的y值不是6?

为什么这段C语言代码中main函数的y值没有变成6?

先看你给出的代码:

#include <stdio.h>

int f1(int *x, int y) {
    y++;
    (*x)++;
    return *x + y;
}

int main() {
    int x = 10, y = 5;
    int z = f1(&x, y);
    printf("x=%d y=%d z=%d\n", x, y, z);
}

运行后输出为:x=11 y=5 z=17

核心原因是C语言的参数传递规则:

  • 对于f1的第二个参数y,采用的是值传递:调用函数时,会把main里y的当前值(5)复制一份,作为函数形参y的初始值。这两个y是内存中完全独立的变量,修改函数里的形参y,不会影响main里的原始y。所以你在f1里执行y++,只是把这个复制出来的临时变量改成了6,main里的y还是原来的5。
  • 而第一个参数&x是地址传递(指针):调用时把main里x的内存地址传给了f1的指针形参x。(*x)++的操作是通过地址直接找到main里的x变量,把它的值加1,所以main里的x从10变成了11,这个改动会被保留。
  • 函数返回的*x + y,是修改后的main里的x(11)加上函数里的临时y(6),结果是17,所以z的值是17。

内容的提问来源于stack exchange,提问作者Rumal Gunawardana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:35:25