第二章 类型、运算符、表达式

来源:互联网 发布:qq空间for mac 编辑:程序博客网 时间:2024/06/08 00:41

1  c语言没有指定同一运算符中多个操作数的计算顺序(&& 、||、?:和,运算符除外。例如,在形如

                 x  = f ( ) + g ( );

      的语句中,f ( )可以在g ( )之前计算,也可以在g ( )之后计算。因此,如果函数 f  和 g 改变了另一个函数所使用的变量,那么x的结果可能会依赖于这两个函数的计算顺序。为保证特定的计算顺序,可以把中间结果保存在中间变量中。

类似地,c语言也没有指定函数各参数的求值顺序。因此,下列语句

  printf ( "%d %d \n", ++n, power ( 2,n ));   //错

 在不同的编译器中可能会产生不同的结果,这取决于n的自增运算在power调用之前还是之后执行。解决的办法是把该语句改写成下列形式:

   ++n;

  printf ( "%d %d \n", n, power( 2,n));

还有类似地  a[i] = i++;

问题是:数组下表i是引用旧值还是新值?对这种情况编译器的解释可能不同,并因此产生不同的结果。

c院标准对大多数这类问题有意未作具体规定。

表达式何时会产生这种副作用(对变量赋值),将由编译器决定,因为最佳的求值顺序同机器结构有很大关系。

2   逗号运算符“ , ”,也是C语言优先级最低的运算符,在for语句中经常会用到它。被逗号分隔的一对表达式将按照从左到右的顺序进行求值,各表达式右边的操作数的类型和值即为其结果的类型和值。

  在某些情况下的逗号并不是逗号运算符,比如分隔函数参数的逗号,分隔声明中的变量的逗号等,这些逗号并不保证各表达式按从左至右的顺序求值。

3  break语句可用于从for、while、do-while、switch等循环中提前退出。

    continue语句用于使for、while、或do-while语句开始下一次循环的执行。在while与do-while语句中,continue语句的执行意味着立即执行测试部分;在for循环中,则意味着使控制转移到递增循环变量部分。continue语句只用于循环语句,不用于switch语句。某个循环中包含的switch语句中的continue语句,将导致进入下一次循环。

0 0