1、使用指针返回多个值
通过传递指针参数,函数可以修改调用者传入的变量。
#include <stdio.h>
void divide(int a, int b, int *quotient, int *remainder) {
*quotient = a / b;
*remainder = a % b;
}
int main() {
int q, r;
divide(10, 3, &q, &r);
printf("商: %d, 余数: %d\n", q, r);
return 0;
}
2、使用 struct
结构体返回多个值
如果需要返回多个不同类型的数据,可以使用结构体。
#include <stdio.h>
typedef struct {
int x;
int y;
} Point;
Point getPoint() {
Point p = {10, 20}; // 赋值
return p;
}
int main() {
Point p = getPoint();
printf("Point: (%d, %d)\n", p.x, p.y);
return 0;
}
3、使用 struct
+ 指针(更高效)
避免结构体拷贝,用指针修改外部变量。
#include <stdio.h>
typedef struct {
int width;
int height;
} Rectangle;
void getRectangle(Rectangle *r) {
r->width = 10;
r->height = 5;
}
int main() {
Rectangle rect;
getRectangle(&rect);
printf("Rectangle: %d x %d\n", rect.width, rect.height);
return 0;
}
4、使用 malloc()
分配动态结构体
动态分配结构体可用于跨函数返回多个值。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int width;
int height;
} Rectangle;
Rectangle* createRectangle(int w, int h) {
Rectangle *r = (Rectangle *)malloc(sizeof(Rectangle));
if (r) {
r->width = w;
r->height = h;
}
return r;
}
int main() {
Rectangle *rect = createRectangle(10, 5);
if (rect) {
printf("Rectangle: %d x %d\n", rect->width, rect->height);
free(rect); // 释放内存
}
return 0;
}
5、使用数组返回多个值
数组适用于相同类型的多个值。
#include <stdio.h>
void findFactors(int num, int factors[], int *count) {
*count = 0;
for (int i = 1; i <= num; i++) {
if (num % i == 0) {
factors[(*count)++] = i;
}
}
}
int main() {
int factors[10];
int count;
findFactors(12, factors, &count);
printf("因数: ");
for (int i = 0; i < count; i++) {
printf("%d ", factors[i]);
}
printf("\n");
return 0;
}