编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果该字符可能组成一个符号,
那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组
成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串
已不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”
要看懂下面式子,明白两点:
1、左值右值区别。
左值简单理解为某一变量(有地址空间),可以出现在=的左边,可进行赋值。
右值:出现在=的右边,可以读取到它的值。
2、未定义表达式 :同一个序列中同一变量只能改变一次。(未定义表达式产生无法预知结果)
3、后置++有优先级高于前置++
++i++ + i++ +i =(++(i++)) + (i++)+i。//贪心法
但是这个表达式有错误:
1、是一个未定义表达式(同一个序列中同一变量只能改变一次);这个表达式i值改变3次。
2、表达式有错误。第一个运算i++会产生一个右值(仅仅是取i的值,而不是获取i)。做完该次运算后再与前一个++,出现错误。右值只允许赋值给左值,无法自加1(无法对存储空间进行操作).
//遇到,或者;表示该运算获取完整可以计算
int i = 3;
int j = (i++,i++,i++);//遇到,表示可以运算。故j=5,i=6
int i =3;
int j = (i++) + (i++) + (i++);//遇到;表示可以运算。故j=9,i=i+3=6
for(i=0,printf("First=%d",i);
printf("Second=%d",i),i<10;//逗号表达式,必须把i<10放在后面。判断条件一直成立,不会退出
i++,printf("Third=%d",i))//i++和printf("Third=%d",i)顺序改变 也会改变打印结果
{
printf("Fouth=%d",i);
}