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

为什么C语言printf()输出变量内存地址而非变量实际计算值

问题根因

输出随机异常值的核心原因是**printf输出结果时参数类型错误**:

  • %lld格式说明符要求传入long long类型的数值,但你在四个计算分支的输出语句中都写了&result,传入的是result变量在内存中的栈地址(属于指针类型)。
  • C语言标准库的printf不会在运行时校验格式符和传入参数的类型匹配,直接把内存地址按长整型规则解析输出,得到的自然是和计算结果无关的随机大数,和你复现的异常表现完全吻合。

补充:这个错误是C语言新手的高频失误——scanf读取输入时需要传入变量地址来修改内存中的值,因此要加&,但printf只需要读取变量的值输出,不需要传地址,不要混淆两个函数的传参规则。

修复方法

删除所有计算分支中printf参数里的取地址符&,直接传入result变量即可。修正后的核心分支代码如下,额外补充了除法运算的除零判断,避免输入除数为0时触发运行时崩溃:

switch(operator)
{
    case 'a':
        result = num1 + num2;
        printf("%lld", result);
        break;
    case 's':
        result = num1 - num2;
        printf("%lld", result);
        break;
    case 'm':
        result = num1 * num2;
        printf("%lld", result);
        break;
    case 'd':
        if (num2 == 0) {
            printf("Invalid operation: divide by zero");
            break;
        }
        result = num1 / num2;
        printf("%lld", result);
        break;
    default:
        printf("Invalid operator");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:06:21