使用指针从C语言自定义函数返回多值失败,仅返回单个值求助
如何用指针从C函数返回多个值
嘿,我看到你尝试用指针从自定义函数返回多个值,但目前只拿到了一个结果,问题出在几个小细节上,我帮你梳理并修正代码:
问题分析
- 你的
sum_n_avg函数代码不完整,没有给*avgp(平均值的指针参数)赋值,导致这个结果没被正确计算和返回。 - 在
main函数中,你调用函数后只打印了函数的返回值,却忽略了通过指针参数已经被修改的sump和avgp变量——这才是你获取多个返回值的关键!
修正方案1:函数返回一个值,指针返回另一个
这种方式保留函数的返回值,同时用指针传递第二个结果,代码更直观:
#include <stdio.h> // 声明函数:返回总和,通过指针返回平均值 double sum_n_avg(double n1, double n2, double n3, double *avgp); int main() { double n1, n2, n3, sum, avg; printf("enter numbers: "); scanf("%lf%lf%lf", &n1, &n2, &n3); // 调用函数:获取返回的总和,同时通过指针拿到平均值 sum = sum_n_avg(n1, n2, n3, &avg); // 现在可以打印两个结果了 printf("sum is %.2lf, average is %.2lf\n", sum, avg); return 0; } double sum_n_avg(double n1, double n2, double n3, double *avgp) { double total = n1 + n2 + n3; *avgp = total / 3.0; // 给指针指向的变量赋值平均值 return total; // 返回总和 }
修正方案2:完全用指针返回多个值(无函数返回值)
如果不需要函数返回值,可以把函数设为void类型,完全依赖指针传递结果:
#include <stdio.h> // 声明函数:无返回值,通过两个指针返回总和和平均值 void sum_n_avg(double n1, double n2, double n3, double *sump, double *avgp); int main() { double n1, n2, n3, sum, avg; printf("enter numbers: "); scanf("%lf%lf%lf", &n1, &n2, &n3); // 传入两个变量的地址,函数内部会直接修改它们的值 sum_n_avg(n1, n2, n3, &sum, &avg); printf("sum is %.2lf, average is %.2lf\n", sum, avg); return 0; } void sum_n_avg(double n1, double n2, double n3, double *sump, double *avgp) { *sump = n1 + n2 + n3; // 给总和指针赋值 *avgp = *sump / 3.0; // 用总和计算平均值并赋值 }
核心要点
- 指针参数的本质是传递变量的内存地址,函数通过解引用操作符
*,可以直接修改该地址上的变量值,这就是实现“返回多个值”的原理。 - 你之前的代码没有正确使用被指针修改后的变量,也没完成
avgp的赋值,所以只拿到了一个结果。
内容的提问来源于stack exchange,提问作者Fahad Xd
相关产品推荐
相关产品推荐

