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

C语言函数间多变量赋值异常:无法正确返回多个值

C语言函数多值返回问题分析与解决办法

问题核心原因

C语言的return语句只能返回单个值,你遇到的两种错误输出都是因为对return语法和多值传递逻辑的误解:

  1. 当你写return var1, var2, var3;时,这是逗号表达式——逗号运算符会从左到右依次计算所有表达式,但最终仅返回最后一个表达式的结果(也就是var3的3)。同时C语言不支持x, y, z = Function();这种一次性给多个变量赋值的语法,导致x、y未被正确初始化,输出默认的0,只有z拿到返回值3,所以结果是0 0 3。
  2. 拆成多行return var1; return var2; return var3;时,函数执行到第一个return就会直接终止,后面的return根本不会执行,只会返回var1的1,x拿到值但y、z未初始化输出0,结果就是1 0 0。

实现多值返回的三种实用方案

1. 指针参数传递(最常用)

通过传入变量的内存地址,在函数内部直接修改对应地址的内存值:

#include <stdio.h>

void getThreeValues(int *a, int *b, int *c) {
    *a = 1;
    *b = 2;
    *c = 3;
}

int main() {
    int x, y, z;
    getThreeValues(&x, &y, &z);
    printf("%d %d %d\n", x, y, z); // 输出1 2 3
    return 0;
}

2. 返回结构体

把需要返回的多个值打包成一个结构体,整体返回:

#include <stdio.h>

typedef struct {
    int val1;
    int val2;
    int val3;
} ThreeValues;

ThreeValues getThreeValues() {
    ThreeValues vals;
    vals.val1 = 1;
    vals.val2 = 2;
    vals.val3 = 3;
    return vals;
}

int main() {
    ThreeValues result = getThreeValues();
    printf("%d %d %d\n", result.val1, result.val2, result.val3); // 输出1 2 3
    return 0;
}

3. 全局变量(不推荐)

将变量声明为全局变量,函数直接修改全局变量的值,但全局变量会污染命名空间,不利于代码维护,仅适合特殊场景:

#include <stdio.h>

int x, y, z;

void setThreeValues() {
    x = 1;
    y = 2;
    z = 3;
}

int main() {
    setThreeValues();
    printf("%d %d %d\n", x, y, z); // 输出1 2 3
    return 0;
}

内容的提问来源于stack exchange,提问作者Kevin Avalos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:57:11