回 帖 发 新 帖 刷新版面

主题:必解

#include <stdio.h>
int f(int a,int b)
{
    int c;
    if (a > b)
    {
        c = 1;
    }
    else if (a == b)
    {
        c = 0;
    }
    else
    {
        c = -1;
    }
    return 0;
}
int main(void)
{    

    int i = 2;
    int p = 0;

    
p = f (i, ++i);
    printf ("%d\n",p);
    return 0;                ///为什么p=0阿?  还有如果我把f函数的renturn 0去掉又为什么是3呢!??谢谢
}

回复列表 (共4个回复)

沙发

return 0;//函数f中这里很清楚,细心额。

板凳


我不知道他为什么i和++i的值是3和3  主要是这!!!!

3 楼

f函数中的返回值应该是c吧
return c;

另外,在vc和tc等平台下函数是按自右至左求实参的值的

也就是说如果

i=2;
f(i;++i)

这种形式时,调用函数f时
先++i,则i由2变成3,所以++i是3;然后才求i值,因为前面先进行++i的运算,所以i已经由2变3,i是3

所以实际上就是f(3,3),而不是f(2.3)

你可以这样改
j=i;
k=i++;
p=f(j,k)

这是谭浩强的《c程序设计》中的例8.4,看书要认真啊,书上说的很详细啊

4 楼

在vc和tc等平台下函数是按自右至左求实参的值的

我来回复

您尚未登录,请登录后再回复。点此登录或注册