C代码输出垃圾值问题分析:为何main函数打印加法返回值异常
问题分析与修复
咱们直接揪出代码里的关键错误:在main函数的最后一行,你写了printf("\nsum=%d",sum);——这里的sum是你定义的函数名,不是函数调用的返回值!
为啥会输出那个奇怪的“垃圾值”?
在C语言里,函数名本身代表的是这个函数在内存中的入口地址(本质是个函数指针)。你用%d格式符去打印这个地址时,相当于把指针的数值当成整数输出了,所以你看到的4195760根本不是加法结果,只是sum函数在内存里的位置编号而已。
额外小提示(非错误,但可以优化)
你的sum函数内部已经打印了add的值,如果你的需求是在main里获取返回值再打印,这个内部打印可以根据需要保留或者删掉,不影响功能,只是输出内容多少的区别。
修正后的代码示例
要正确拿到加法的返回值,你需要调用函数(也就是加个括号传参数),而不是直接写函数名。两种写法都可以:
#include <stdio.h> int sum(int x,int y) { int add = x + y; // 可以直接初始化,更简洁 printf("\nadd=%d", add); return add; } int main() { int a = 1, b = 2; // 写法1:直接在printf里调用函数获取返回值 printf("\nsum=%d", sum(a, b)); // 写法2:先把返回值存到变量里,再打印(更清晰,适合需要多次使用结果的场景) // int total = sum(a, b); // printf("\nsum=%d", total); return 0; }
这样运行后就会输出add=3 sum=3(如果保留sum里的printf),结果完全符合预期啦。
内容的提问来源于stack exchange,提问作者Sushil Kumar
相关产品推荐
相关产品推荐

