1:为什么第二种函数体不行呢 2:为什么第一种函数体内的函数是sign(x),不应该return sign(x)吗,为什么是return y,而为什么return y 但主函数中的sign(x)却赋值


int sign( int x );
其中x是用户传入的整型参数。符号函数的定义为:若x大于0sign(x) = 1;若x等于0sign(x) = 0;否则,sign(x) = −1int main()
{
    int x;

    scanf("%d", &x);
    printf("sign(%d) = %d\n", x, sign(x));
    
    return 0;
}

    int sign( int x )
{
    int y;
    if(x > 0)
        y = 1;
    else if(x == 0)
        y = 0;
    else
        y = -1;
    return y;
}
{
    if(x>0)
    {
        sign(x) = 1;
    }
    else if(x==0)
    {
        sign(x) = 0; 
    }
    else
    {
        sign(x) = -1;
    }
return sign(x);
}



参考GPT和自己的思路:首先,第二种函数体不行是因为在C语言中,函数名表示的是函数的地址,而函数名是不能被赋值的,所以不能通过赋值来改变函数的返回值。

其次,第一种函数体中的函数sign(x)并不是函数调用,而是在函数体内部定义的一个变量y的值,所以可以直接return y,而不需要return sign(x)。在主函数中的sign(x)也是调用了函数而不是赋值。

总结:函数名表示的是函数的地址,不可被赋值。y是函数体内定义的变量,所以可以直接return y。在主函数中,sign(x)表示调用sign函数,不是赋值。

sign(x) = 1; --- 没有这种写法啊,前面是函数调用,函数调用怎么能赋值呢?


        {
    if(x>0)
    {
       return 1;
    }
    else if(x==0)
    {
        return 0; 
    }
    else
    {
        return -1;
    }

}

这样写

的确有些语言,是写函数名=什么值来返回的,比如说basic,但是C语言没有这个语法。
还有的语言(比如Ruby)是最后一行的表达式自动返回。见得多了就会知道编程语言的五花八门