• 5 运算符、表达式和语句


    3.3 递增运算符:++

    递增运算符(increment operator)将其运算对象递增1。该运算符以两种方式出现:

    1. ++出现在其作用的变量前面,这是前缀模式
    2. ++出现在其作用的变量后面,这是后缀模式

    两种模式的区别在于递增行为发生的时间不同,前缀模式下先进行自增操作,而后缀模式后进行自增操作,如下的程序解释了前缀模式:

    shoe = 2.0;
    while (++shoe < 18.5)
    {
     	foot = SCALE*shoe + ADJUST;
     	printf("%10.1f %20.2f inches\n", shoe, foot);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在while语句中,shoe 的值先递增1,然后才和18.5作比较。如果递增后的值小于18.5,则执行花括号内的语句一次。然后, shoe的值再递增1,重复刚才的步骤,直到shoe的值不小于18.5为止。整个过程如图5.4所示:
    在这里插入图片描述

    递增运算符的一个优点是,通常它生成的机器语言代码效率更高,因为它和实际的机器语言指令很相似。尽管如此,随着商家推出的C编译器越来越智能,这一优势可能会消失。一个智能的编译器可以把x=x+1当作++x对待。

    递增运算符还有一个在某些场合特别有用的特性。我们通过程序清单5.11来说明。

    程序5.11

    /* post_pre.c -- postfix vs prefix */
    #include 
    
    int main(void){
     	int a = 1, b = 1;
     	int a_post, pre_b;
     	
     	a_post = a++; // value of a++ during assignment phase
     	pre_b = ++b; // value of ++b during assignment phase
     	printf("a a_post b pre_b \n");
     	printf("%1d %5d %5d %5d\n", a, a_post, b, pre_b);
     	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    编译后程序的输出应该是:

     a 	a_post 	b 	pre_b
     2 	1 		2 	2 
    
    • 1
    • 2

    可以看出,当运算符和运算对象是更复杂表达式的一部分时,使用前缀或后缀的效果不同:a_ post是a递增之前的值,而b_ pre是b递增之后的值,整个过程如图5.5所示:
    在这里插入图片描述

    单独使用递增运算符时(如,ego++; ),使用哪种形式都没关系。

    3.4 递减运算符:–

    待补充 138

  • 相关阅读:
    Android开发面试指南
    Java:性能优化细节31-45
    Chapter 6 提升
    Java8中Optional解决空指针异常
    多态的理解和使用
    2022年ios证书最新申请流程
    ExcelPatternTool: Excel表格-数据库互导工具
    如何限制内网网速
    阿里云使用密钥登录服务器
    XmlElement注解在Java的数组属性上,以产生多个相同的XML元素
  • 原文地址:https://blog.csdn.net/kking_edc/article/details/126024440