• 自增自减与赋值运算


    首先我们来看一下赋值运算符的使用,请看下面的代码和输出结果。

    1 #include<stdio.h>
    2 
    3 int main(void)
    4 {
    5     int a=2,b=7;
    6     b+=++a;
    7     printf("a=%d,b=%d",a,b);
    8     return 0;
    9 }

    输出结果如下:

    a=3,b=10

    如果仅仅是一个等于号进行赋值,那么把右边表达式的值提取出来存放到等号左边对应的存储空间(一般就是存给一个变量)。

    如果是类似于+=这种形式,例如a+=3,就相当于是a=a+3。

    然后我们来看一下自增运算符(因为自减运算符同理,所以本文不再阐述)。

    如果是a++这种形式,那么就是先把a变量的值传出来使用然后再自增,也就是a++这个表达式的值是原先a的值,且a++只能成为一个表达式了,不能当变量来用,即不能对a++进行赋值,不能a++=2。

    如果是++a这种形式,那么就是先将a变量自增,再传出自增后的值,也就是++a这个表达式的值是自增后a的值,且++a不仅可以是表达式,也可以当变量来用,相当于是变量a,可以对++a进行赋值,即++a=5,是有效的。(本人之前理解错误,应该是只能对a赋值,不能对++a、a+=1、a=2等赋值,但是这些都能代表变量a的值)

    所以说下面请看几个例子,分别是含有b=a++,a=a++,a+=++a,a+=a++的代码(在一个C语言程序里同时含有以上内容)。

     1 #include<stdio.h>
     2 
     3 int main(void)
     4 {
     5     int a=2,b=a++;
     6     printf("(1)a=%d,b=%d\n",a,b);
     7     a=a++;
     8     b+=++b;
     9     printf("(2)a=%d,b=%d\n",a,b);
    10     a+=a+++(a+=++a);
    11     b+=(b+=++b)+(++b);
    12     printf("(3)a=%d,b=%d\n",a,b);
    13     return 0;
    14 }

    运行结果如下:

    (1)a=3,b=2
    (2)a=4,b=6
    (3)a=31,b=45

    Note:本人不建议初学者研究第三行的输出结果。

    为了方便读者理解,本人写出了等效代码如下(输出结果是一样的):

     1 #include<stdio.h>
     2 
     3 int main(void)
     4 {
     5     int a=2,b=a;
     6     a++;
     7     printf("(1)a=%d,b=%d\n",a,b);
     8     a=a,a++;
     9     b=b+1,b+=b;
    10     printf("(2)a=%d,b=%d\n",a,b);
    11     a+=++a;
    12     a+=(a++)+(a);//a+=a+a,a++;
    13     b+=++b;
    14     b+=(b)+(++b);//++b,b+=b+b;
    15     printf("(3)a=%d,b=%d\n",a,b);
    16     return 0;
    17 }

    注释相当于是对等效代码的这一行代码再次化简。

  • 相关阅读:
    关于Quartz .NET(V3.0.7)的简要说明
    .NET实现一个简单的IOC容器
    .NET中的控制反转及AutoFac的简单说明
    .NET异步程序设计——async&await
    .NET异步程序设计——任务并行库
    .NET异步程序设计——异步委托
    .NET异步程序设计——概念引入
    关于C#程序的单元测试
    关于Log4Net的使用及配置方式
    基于.net ,使用几种常见的NoSQL数据库
  • 原文地址:https://www.cnblogs.com/leisureeen/p/12100391.html
Copyright © 2020-2023  润新知