c语言的问题1111111111111111111111111111111

#define N 3+5*2
printf("%d",N+printf("%d",N*N));
printf("%d",N++);
这个怎么输出的呀

首先是宏,宏是完全带入的,所以NxN实际上是: 3+5x2x3+5x2
其次是printf,这是一个函数,里面的数据结构是栈,也就是printf的计算方式是从右向左计算,所以printf("%d",N+printf("%d",NxN));是先输出printf("%d",NxN)这里的结果是43。
最后是printf的返回值,printf函数的返回值是printf实际控制输出的字符数,例如
int i=123;
printf("%d",i),这里返回值是3
printf("%d",N+printf("%d",NxN));这里打印的字符是43,也就是说字符数是2,所以输出的结果是4315。

因为用星号会出现莫名其妙的东西,所以用x代替了星号 :)

N*N ==> 3+5*2*3+5*2=43 printf的返回值为输出字符的个数2,先输出printf("%d",N*N)对应的43,43是两个字符再输出printf("%d",N+printf("%d",N*N));对应的结果15

N++在我的编译器上面跑不了,就不知道咯:P