前缀++(--)和后缀++(++)是有区别的。

再单独使用的时候是没有区别的,都是自身递增或者递减1.

但是综合使用起来会一样吗?

下面的例子都是++,替换成--也是一样,道理都是一样的。

请先看下面例子:

#include<stdio.h>
int main(void)
{
int a=,b=;
a++; //后缀++
++b; //前缀++
printf("a++ is %d\n",a );
printf(" ++b is %d",b ); }

出来的结果都是1.

既然结果都一样,那说个P啊!

呵呵

是吗,那么看下面的例子。

#include<stdio.h>
int main(void)
{
int a=;
int b=; int c=++a*;
int f= *b++;
printf("c=%d a=%d\n", c,a);
printf("f=%d b=%d",f,b);
}

如果按照上面的说法,他们的值都应该是是5。

但是结果?

什么结果?

a =1,b=1

c=5    f=0

是不是奇怪在f为什么是0?

还是要考虑他们的(前缀++和后缀++)的运算方式:

假设

int i=0 ;int A;

A=i++*5

A=0

*********************************************************

int i=0 ;int B;

B=++I*5;

B=5

 

第一种是 I与5相乘并将值赋予A,之后I在递增1

第二种是 I递增1在于5相乘并将值赋值与B

 ***************************************************************

也就是前缀(++)(--)会先递增/递减并在执行表达式

而后缀呢? 是先让执行表达式并赋值后,在执行递增/递减(也就是后缀的影响到其本身5*i++,只影响到I,并且还是在表达式全部完成后)

值得一说的是,递增/递减只会影响到一个可以修改的左值。在括号的作用下也是白扯。

x*y++等于(x)*(y++)=x*y,然后再y++

而不是等于(x*y)++,因为x+y并不是一个可以修改的值

他们之间的优先级也是不一样的。前缀的(++)(--)优先级要比后缀的(++)(--)优先级要高。

在使用递增/递减的时候要考虑前缀和后缀的区别。

温故而知新_C语言_前缀++(--)和后缀++(--)的更多相关文章

  1. 温故而知新_C语言_递归

    递归. 是的,差不多就是这种感觉.上面就是类似递归的显示表现. 2017 10 24更新: 递归这个问题放了很久.也没有写.大概是自己还没有好好理解吧. 在这里写下自己理解的全部. 一 何为递归. 字 ...

  2. 选择排序_C语言_数组

    选择排序_C语言_数组 #include <stdio.h> void select_sort(int *); int main(int argc, const char * argv[] ...

  3. 插入排序_C语言_数组

    插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...

  4. 快速排序_C语言_数组

    快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...

  5. 冒泡排序_C语言_数组

    冒泡排序_C语言_数组 #include <stdio.h> //冒泡排序 小->大 void sort(int * pArray, int len); int main(int a ...

  6. 温故而知新_C语言_define_宏

                                                                                             define defi ...

  7. 数据结构_C语言_二叉树先序、中序、后序遍历

    # include <stdio.h> # include <stdlib.h> typedef struct BiTreeNode { char data; struct B ...

  8. 数据结构_C语言_单链表

    # include <stdio.h> # include <stdbool.h> # include <malloc.h> typedef int DataTyp ...

  9. 【书籍下载链接】_1_第一轮_C语言书籍

    各位朋友,如果您觉得下载的电子书,看的还可以,请购买纸质版的图书,如果您觉得 您下载的书,不值得一看请在下载后直接删除. Windows汇编:http://dl.vmall.com/c0jk1v970 ...

随机推荐

  1. mysqldump全备份脚本mysqlallbackup.sh

    库小,大概16G左右,每天增量很小,不到100M,所以用mysqldump每天全量备份,将备份结果信息发送到email通知DBA. mysqlallbackup.sh :MySQL DataBase ...

  2. [转]socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题

    Tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据. 在阻塞模式下, send函数的过程是将应用程序请求发送的数 ...

  3. iOS利用SDWebImage图片下载缓存

    一.我们先来了解一下SDWebImage的使用: 1.导入框架,引入头文件: #import "UIImageView+WebCache.h" 也可以直接使用CocoaPods来引 ...

  4. IDEA 运行spingboot时出现Process finished with exit code -1073741819 (0xC0000005)

    经过多方查证,问题最终定位在金山词霸2016上,如果开启了金山词霸的取词和划意功能,就会出现此错误,估计是冲突吧. 解决办法:关掉金山词霸,或者把金山词霸的取词和划意功能关掉.经过尝试,发现只要在ID ...

  5. X509 文件扩展名

    编码 (也用于扩展名) .DER = 扩展名DER用于二进制DER编码的证书.这些证书也可以用CER或者CRT作为扩展名.比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”. ...

  6. Python 标准库 -> Pprint 模块 -> 用于打印 Python 数据结构

    使用 pprint 模块 pprint 模块( pretty printer ) 用于打印 Python 数据结构. 当你在命令行下打印特定数据结构时你会发现它很有用(输出格式比较整齐, 便于阅读). ...

  7. WCF上传大文件处理方法

    <system.serviceModel> <bindings> <basicHttpBind> <Binding name=" maxReceiv ...

  8. docker 笔记(3)第一个dockerfile

    #vim Dockerfile FROM ubuntu RUN apt-get update && apt-get install -y vim #docker build -t ub ...

  9. mysql in 方法查询 按照 in队列里的顺序排序

    String sql ' GROUP BY comm " + "order by field(comm,?,?,?,?,?,?,?,?)"; stmt = conn.pr ...

  10. JAVA对Excel文件进行操作

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...