#include <stdio.h>
#define S(r) ((r)*(r))
void main()
{
int i=5;
printf("%d",S(++i));
}
编译到S(++i)处等价于在计算表达式((++i)*(++i)),这个你应该明白吧
然后 int i=5;
((++i)*(++i)),
然后计算第一个(++i)此时就是i就等于6了,对吧,然后在计算第二个*(++i)),此时,i就等于7了,
((++i)*(++i)),就相当与7*7就等于49了,
你要想等于36
((++i)*(i)),这样写就行了,i自增一次,变为6,就是6*6了,(当第一个(++i)=6时,后面的i也就跟这变了,要不明白就看看作用域)
我想这下你明白了吧
我也刚学,一起学习~~