Zichenya 发表于 2020-6-2 22:40:39

这题求解

#include<stdio.h>
int fun(int x, int y)
{ return (x+y); }
main( )
{
int a=2,b=2,c=3,sum;
sum=fun(fun((++a,++b),a+b),a++);
printf("%d\n",sum);
}

运算过程是怎么样的? 结果10怎么出来的?

sunrise085 发表于 2020-6-2 23:45:17

sum=fun(fun((++a,++b),a+b),a++)
从右向左计算
sum=fun(fun((++a,++b),a+b),2),此时a为3
sum=fun(fun((++a,++b),5),2)
sum=fun(fun((4,3),5),2)
sum=fun(fun(3,5),2)
sum=fun(8,2)
sum=10

赚小钱 发表于 2020-6-3 00:28:56

学会了,可能考试多得几分,但不帮助面试
学不会,可能考试少得几分,但不影响面试

小甲鱼的铁粉 发表于 2020-6-3 08:17:54

sunrise085 发表于 2020-6-2 23:45
sum=fun(fun((++a,++b),a+b),a++)
从右向左计算
sum=fun(fun((++a,++b),a+b),2),此时a为3


666

L.G.明 发表于 2020-6-3 09:15:29

sunrise085 发表于 2020-6-2 23:45
sum=fun(fun((++a,++b),a+b),a++)
从右向左计算
sum=fun(fun((++a,++b),a+b),2),此时a为3


为什么到4步4不见了

sunrise085 发表于 2020-6-3 09:49:16

L.G.明 发表于 2020-6-3 09:15
为什么到4步4不见了

因为那里有小括号,(4,3)的结果就是3。并列语句的结果是最右侧的结果。例如:int a=(0,3+4,5*8)得到的a值是40

405794672 发表于 2020-6-5 15:22:41

我觉得你少写了个fun。fun(++a,++b)和(++a,++b)结果不一样。前者是函数,后者取最后一个值作为结果。
页: [1]
查看完整版本: 这题求解