对于表达式它的值:
i=10;
i = i-- - --i * (i = -3) * i++ + ++i;
的结果,和《一站式》解释的一样,结果都是未定义的,一站式上主要关注的是side effect,《c和指针》上讲解的更好,看了之后我是真的理解了:
一句话,优先级高的操作符先执行,优先级相同的,根据结合性决定执行顺序,但是表达式的求值顺序是不确定的,编译器做的只是不违背优先级和结合性而已。
ok,快11点半了,先来两个小菜,呵呵:
[root@bjxdurs235 20090713]# cat -n float.c
1 #include
2 int main(void)
3 {
4 printf("%f\n",(float)( 25 / 10 ));
5 }
[root@bjxdurs235 20090713]# ./float
2.000000
这个小程序说明了强制类型转换。
[root@bjxdurs235 20090713]# cat -n logic.c
1 #include
2 int main(void)
3 {
4 int a = 20;
5 if ( 1 <= a <= 10 )
6 printf("In range\n");
7 else
8 printf("Out of range\n");
9 }
[root@bjxdurs235 20090713]# ./logic
In range
这个小程序说明了关系运算符的求值顺序,从左到右进行,比较简单。
阅读(423) | 评论(0) | 转发(0) |