begin
首先声明我已经吐了。。。关于这个表达式要多实践一下,多说无意,自己多实验一下,真正生产中没人会这么写,肯定那个会被老板打死的,内部肯定和编译器等的运行机理有关,我等只能黑盒子一样,测试能想到的饿各种情况总结所谓规律,真累,也没有意义。所以我就懒一下,不详细解释,有一篇文章让我理解了,待会儿附上,我就了解一下吧,可能我的认识还是比较浅薄。也不能说毫无用处,至少知道了printf是从右到做求值输出的。
来自博客:http://www.cnblogs.com/IAmBetter/p/3175711.html
附上我自己写的渣渣测试:
#include "mydecl.h"
//----------
void fun1();
void fun0();
//----------
int main(void){
// fun0()
//============fun1()
printf("run fun1\n");
fun1();
return 0;
}
void fun0(){
int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=3;j;j--){
switch(j){
case 1:
case 2:
printf("case 2---%d,",*p++);
break;
case 3:
// printf("case3:%d\n", p);
printf("case3---%d,", *(--p));
}
putchar('\n');
}
}
//=======================
void fun1(){
/*int q[]={1,2,3,4,5,6};
int *p;
p=q;
printf("%d,%d,%d\n",*p,*p++,*(p++));*/
puts("------restore---++ and * which is higher?---");
int a[]={0,2,4,6,8,10,12,14,16},x,y;
int *p,*q;
p=a;
q=a;
x=(*p)++;//*p++;
int x_1=*p;
y=*++q;
printf("x= %d\n", x);
printf("x_1= %d\n",x_1 );
printf("y= %d\n", y);
// x=p++*;//error
// y=++p*;//error
/*printf("x=p++*:%d\n", y);
printf("y=++p*:%d\n", y);*/
}