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

C语言计算两数和与绝对差程序输出错误原因求解

错误原因

  • 核心错误是update函数中计算绝对差时,直接对*指针变量a、b*做减法,而非对它们指向的整数值做运算:
    C语言中两个同类型指针相减,得到的是两个指针地址的偏移量(单位为对应类型的字节数),和指针指向存储的整数值完全无关。你遇到的输入(4,5)输出正确纯粹是巧合:此时栈上两个int变量a、b的地址偏移刚好是1,和两个数的绝对差一致,其他输入就会出现不符合预期的结果。
  • 额外隐藏问题:你在计算绝对差前已经修改了*a的值为两数之和,就算你把指针减法改成*a - *b,拿到的也是「两数之和减去原来的b」,不是原来两个数的差,结果依然错误。

修复后的代码

#include <stdio.h>
#include <stdlib.h>

void update(int *a,int *b) {
    // 先暂存原始值,避免修改后无法读取初始数据
    int old_a = *a;
    int old_b = *b;
    *a = old_a + old_b;
    *b = abs(old_a - old_b);
}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;
    
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:48:03