使用 C 语言函数返回多个值285


在 C 语言中,函数可以返回单个值。但是,有时候需要从函数中返回多个值。有几种方法可以实现这一点。

1. 通过引用传递

可以将指针作为函数参数传递,并通过指针修改值。例如:```c
#include
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 10;
int b = 20;
swap(&a, &b);
printf("a = %d, b = %d", a, b); // 输出:a = 20, b = 10
return 0;
}
```

2. 返回结构体

可以创建结构体来存储多个值,然后返回该结构体。例如:```c
#include
typedef struct {
int x;
int y;
} Point;
Point getPoint() {
Point p;
p.x = 10;
p.y = 20;
return p;
}
int main() {
Point p = getPoint();
printf("x = %d, y = %d", p.x, p.y); // 输出:x = 10, y = 20
return 0;
}
```

3. 使用变长参数

C99 引入了变长参数功能,可以传递可变数量的参数给函数。例如:```c
#include
double average(int num, ...) {
va_list args;
va_start(args, num);
double sum = 0;
for (int i = 0; i < num; i++) {
sum += va_arg(args, double);
}
va_end(args);
return sum / num;
}
int main() {
double avg = average(3, 10.0, 20.0, 30.0);
printf("Average: %.2f", avg); // 输出:Average: 20.00
return 0;
}
```

4. 使用全局变量

可以在函数中修改全局变量,从而实现返回多个值。但这种方法不推荐使用,因为它会破坏程序的封装性。

5. 第三方库

可以利用第三方库,如 GLib,来实现返回多个值。例如:```c
#include
GArray *getArray() {
GArray *array = g_array_new(FALSE, TRUE, sizeof(int));
g_array_append_val(array, 10);
g_array_append_val(array, 20);
return array;
}
int main() {
GArray *array = getArray();
for (int i = 0; i < array->len; i++) {
printf("%d ", g_array_index(array, int, i));
}
printf(""); // 输出:10 20
return 0;
}
```

选择方法

选择哪种方法返回多个值取决于具体的需要和场景。如果值需要在函数外进行修改,则通过引用传递是合适的。如果需要返回一个结构化的数据,则返回结构体是更好的选择。变长参数可以用来处理可变数量的数据。全局变量不推荐使用,除非有特殊需求。

2024-11-14


上一篇:C 语言全面输出数据指南

下一篇:函数形参实参在 C 语言中的奥秘