C语言处理多个返回值的问题

在C语言中,return语句本身只能返回一个值,但我们可以通过其他技巧让被调用函数“传回”多个结果给调用者。常用方法包括指针参数、结构体、数组、全局变量等,每种方式适用场景不同。

1. 使用指针参数(推荐)通过将变量地址传入函数,函数内部直接修改这些地址指向的值,实现多值返回。
这种方法高效且类型安全,适合返回不同类型或数量已知的值。

#include <stdio.h>
void calculate(int a, int b, int *sum, int *product) 
{
   *sum = a + b;
   *product = a * b;
}
int main() {
   int x = 5, y = 3, sum, product;
   calculate(x, y, &sum, &product);
   printf("Sum: %d\nProduct: %d\n", sum, product);
   return 0;
}

2. 使用结构体将多个相关值封装到结构体中,函数直接返回该结构体。
这种方式代码清晰,适合返回逻辑相关且类型可能不同的值。

#include <stdio.h>
struct Result 
{ 
    int sum; 
    int product; 
};
struct Result calculate(int a, int b) 
{
   struct Result r;
   r.sum = a +b;
   r.product = a *b;
   return r;
}
int main() 
{
   struct Result res = calculate(5, 3);
   printf("Sum: %d\nProduct: %d\n", res.sum, res.product);
   return 0;
}
//首先定义了结构Result,又定义了函数calculate,最后调用了函数。

//注意以结构做为类型时,必须在结构名前带有关键字struct。想不带也可以,那就需要用typedef为struct Result取个别名,这个名字可以仍然是Result,但这样就可以省掉关键字struct了

#include <stdio.h>
typedef struct  Result 
{ 
    int sum; 
    int product; 
} Result;
Result calculate(int a, int b) 
{
   Result r;
   r.sum = a +b;
   r.product = a *b;
   return r;
}
int main() 
{
   Result res = calculate(5, 3);
   printf("Sum: %d\nProduct: %d\n", res.sum, res.product);
   return 0;
}

3. 使用数组适用于返回同类型多个值,可通过传入数组指针或返回动态分配的数组(需注意内存管理)。

#include <stdio.h>
void calculate(int a, int b, int results[]) 
{
   results[0] = a + b;
   results[1] = a * b;
}
int main() 
{
   int res[2];
   calculate(5, 3, res);
   printf("Sum: %d\nProduct: %d\n", res[0], res[1]);
   return 0;
}

下面是返回动态分配的数组:

#include <stdio.h>
#include <stdlib.h>

int* calculate(int a, int b)//返回指针,函数内malloc
{
    int* results = (int*)malloc(2 * sizeof(int));
    if (results == NULL) 
    {
        return NULL;  // 分配失败
    }
    results[0] = a + b;
    results[1] = a * b;
    return results;
}

int main()
{
    int* res = calculate(5, 3);
    if (res == NULL)
    {
        printf("内存分配失败\n");
        return 1;
    }
    printf("Sum: %d\nProduct: %d\n", res[0], res[1]);
    free(res);  // 记得释放
    return 0;
}

4. 使用全局变量(不推荐) 全局变量可在函数内外共享,但会破坏封装性,增加维护难度。

posted @ 2026-06-16 01:54  Yang先生丶  阅读(4)  评论(0)    收藏  举报