a++ 和 ++a

来源:百度知道 编辑:UC知道 时间:2024/05/17 22:44:09
#include <stdio.h>
#define max(a, b) ((a) > (b) ? (a) : (b))
void main()
{ int a , b, c;
a= 5; b= 4, c = 4;
c= max(a++, ++b);
printf("%d %d %d ", a, b, c);
}

结果是6,6,6
怎么回事啊?

#define定义的函数在预编译的时候被直接替换到程序中,预编译后的程序如下:
#include <stdio.h>
((a) > (b) ? (a) : (b))
void main()
{ int a , b, c;
a= 5; b= 4, c = 4;
c= ((a++) > (++b) ? (a++) : (++b)) ;
printf("%d %d %d ", a, b, c);
}

c= ((a++) > (++b) ? (a++) : (++b)) ;
这一句中,a++的返回值为加1前a的值也就是5,这时a的值为6,++b的返回值为加1后的值也就是5,这时b的值为5,所以(a++) > (++b)这个条件不成立,就返回(++b)得值,由于b在前面的运算中已经加过一次1了,这里又加一次,所以b的值为6,((a++) > (++b) ? (a++) : (++b)) 得返回值也是6,c的值就也是6了。程序运行到这里,a、b、c的值都是6。

欢迎访问我的论坛:)
http://www.chinesebloger.com
期待您的支持:)

你可以参考以下这里:
http://zhidao.baidu.com/question/9282013.html

编译后为:
c = a++>++b?a++:++b;

c = max(a++, ++b)

<=>

c = a++ > ++b ? a++ : ++b;

知道了吧.