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

C语言中函数调用实现重量转换的指针应用问题

问题分析与修正代码

你的代码核心问题在于对指针的使用方式错误,以及函数返回值的不合理声明。以下是修正后的代码和详细解释:

修正后的代码

#include <stdio.h>

// 函数原型改为void,因为不需要返回值
void weight(float* grm, float* ton, float* lbs);

int main()
{
    float grams, tons, pounds;
    weight(&grams, &tons, &pounds);
    
    // 打印所有转换结果
    printf("克(Gram): %.2f\n", grams);
    printf("吨(Ton): %.6f\n", tons);
    printf("磅(Lbs): %.2f\n", pounds);
    
    return 0;
}

void weight(float* grm, float* ton, float* lbs)
{
    float kg;
    printf("请输入商品的千克重量: ");
    scanf("%f", &kg);
    
    // 使用解引用操作符(*)修改指针指向的变量值
    *grm = 1000 * kg;   // 千克转克
    *ton = 0.001 * kg;  // 千克转吨
    *lbs = 2.20462 * kg; // 更精确的千克转磅系数(原代码2.25误差较大)
}

关键修正点说明

  • 函数返回类型调整:
    原函数声明为int但未返回任何值,属于未定义行为。由于我们通过指针直接修改主函数中的变量,不需要返回值,因此将函数返回类型改为void。

  • 指针解引用操作:
    原代码中grm=1000*kg;是错误的——grm是指针变量,存储的是主函数中变量的内存地址,直接给它赋值浮点数会覆盖地址值,根本不会修改目标变量。正确的做法是使用*grm(解引用操作),表示访问指针指向的内存位置,然后将计算结果赋值给该位置。

  • 磅转换系数修正:
    原代码中使用2.25作为千克转磅的系数不够准确,标准系数约为2.20462,这里做了优化,你也可以根据需求改回2.25。

  • 完善输出内容:
    主函数中补充了吨和磅的打印,让结果更完整,并添加了小数点位数控制,使输出更美观。

内容的提问来源于stack exchange,提问作者Harshal Malani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:18