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

为何C语言函数调用后主函数变量值未更新?技术咨询

为什么调用fun函数后主函数的i、j值没更新?

你的代码里有两个关键问题导致主函数的i、j值始终不变:

1. C语言默认是「值传递」参数

当你在主函数里调用fun(i,j)时,程序会把主函数中i、j的数值复制一份,传给fun函数里的形参i和j。这两个形参是fun函数的局部变量,和主函数的i、j存放在完全不同的内存地址里——相当于两个毫不相干的变量。你在fun里修改形参i、j的值,只会改变这两个局部变量,根本影响不到主函数里的原变量。

2. fun函数的返回值写法完全错误

你把fun声明成了void类型,意味着这个函数不能返回任何值,但你写了return i,j;,这本身就是语法错误。退一步说,就算fun不是void类型,return i,j;是逗号表达式,只会返回j的值,也没法同时返回两个结果。

怎么修改才能让主函数拿到更新后的值?

如果想让函数修改主函数里的变量,有两种常用方法:

方法一:用指针(地址传递)

把变量的地址传给函数,函数通过指针直接操作原变量的内存:

#include<stdio.h>
// 形参改成指针类型
void fun(int *i, int *j){
    *i = (*i) * (*i); // 通过指针访问并修改原变量的值
    *j = (*j) * (*j);
}

int main(){
    int i = -5;
    int j = -2;
    fun(&i, &j); // 传入变量的地址
    printf("i = %d j = %d\n",i,j);
    return 0;
}

方法二:用结构体返回多个值

如果需要返回多个结果,可以定义一个结构体,把要返回的值打包进去:

#include<stdio.h>
// 定义存放结果的结构体
typedef struct {
    int val1;
    int val2;
} Result;

Result fun(int i, int j){
    Result res;
    res.val1 = i * i;
    res.val2 = j * j;
    return res;
}

int main(){
    int i = -5;
    int j = -2;
    Result res = fun(i,j);
    // 把返回的结果赋值给原变量
    i = res.val1;
    j = res.val2;
    printf("i = %d j = %d\n",i,j);
    return 0;
}

内容的提问来源于stack exchange,提问作者jeyanth kannan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:24:59