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

使用指针从C语言自定义函数返回多值失败,仅返回单个值求助

如何用指针从C函数返回多个值

嘿,我看到你尝试用指针从自定义函数返回多个值,但目前只拿到了一个结果,问题出在几个小细节上,我帮你梳理并修正代码:

问题分析

  1. 你的sum_n_avg函数代码不完整,没有给*avgp(平均值的指针参数)赋值,导致这个结果没被正确计算和返回。
  2. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:00:32