首先说18题,这个函数是由返回值的,所以只有D不是赋值操作。24题:因为最后一句:
printf("%d/N",SUB(a++,b++));中的SUB不是函数而是预编译。它使SUB(a++,B++)在编译时变为:(a++)*b++,。所以这时的就是:3*45=12
25题:fun中的i,M为static变量,也就是静态变量,所以在函数Fun内是一直记录的,也就是知道程序结束才消失,而你主函数main中在第一次调用fun时结束时,fun中的i=3,m=8,所以这时返回值为8,而当第二次调用时fun内i=3,m=8.结束时:i=12,m=17.所以返回值为17
18 其实D不能算错,之所以这里算错我估计是因为返回值没有赋给一个变量
24 SUB(a++,b++) 变成 (a++)*b++ = 3*4++ = 12
25
第一次调用fun:
i=i+m+1=2+0+1=3;
m=i+x+y=3+4+1=8;
return m (返回8)
第一次调用fun:
i=i+m+1=3+8+1=12; //m, i 都是static, 保留上次调用被改变的值
m=i+x+y=12+4+1=17;
return m (返回17)