以下c代码有什么问题打印垃圾值?

时间:2018-04-11 08:53:06

标签: c

#include <stdio.h>

int sum(int x,int y)
{
    int add;
    add=x+y;
    printf("\nadd=%d",add);
    return add;
}

int main()
{
    int a,b;
    a=1;b=2;
    sum(a,b);
    printf("\nsum=%d",sum);
    return 0;
}
  

输出:
  添加= 3
  总和= 4195760

这里有什么不对,为什么返回的添加是在主函数中打印一个垃圾值。

4 个答案:

答案 0 :(得分:5)

sum(a,b);

这是问题您正在打印函数的值(指向函数的指针,垃圾值)而不是具有总和值的变量!您应该使用int ans=sum(a,b);printf("%d",ans);来获得所需的答案

答案 1 :(得分:1)

您有一个名为sum的函数,但您没有在printf()中调用它。你正在做的是使用它的地址。

写作

int sum(int x,int y)
{
    int add;
    add=x+y;
    printf("\nadd=%d",add);
    return add;
}

您已声明并实施了一个名为sum的函数,该函数收到2 int个,并输出1.但是,每次使用此sum而不使用()时(就像在你的printf中一样,你只需告诉编译器获取该符号的值,并且函数符号的值是它的地址,因此你得到了奇怪的值。

修复:

int main()
{
    int a,b;
    a=1;b=2;
    int s = sum(a,b);  /* Option 1 - save output of sum into a variable s */
    printf("\nsum=%d",s); /* use that variable */

    /* Option 2 */
    /* skip the line sum(a,b); and call the function from inside printf */

    printf("\nsum=%d",sum(a,b));
    return 0;
}

答案 2 :(得分:0)

printf("\nsum=%d",sum);

此行正在尝试打印sum,但sum并未声明为int,而是作为函数。因此,它打印指向函数sum的指针。

答案 3 :(得分:0)

在printf中

你试图打印sum的值,这是函数名。函数名称包含地址。所以它是函数和的打印地址。 要打印实际结果,您必须调用函数sum(a,b)

 printf("\nsum=%d",sum(a,b));