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

再单独使用的时候是没有区别的,都是自身递增或者递减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. Spark Streaming之一:整体介绍

    提到Spark Streaming,我们不得不说一下BDAS(Berkeley Data Analytics Stack),这个伯克利大学提出的关于数据分析的软件栈.从它的视角来看,目前的大数据处理可 ...

  2. Mongodb 5节点异地两中心故障转移恢复测试案例

    Mongodb5节点异地两中心故障转移恢复测试案例 架构方式:5节点,主中心(2数据1仲裁),备中心(1数据1仲裁) 1基本情况 操作系统:Red Hat Enterprise Linux Serve ...

  3. JAVA基础知识(16)-----Integer

    Integer对象数字格式的字符串转成基本数据类型的方法:1:将该字符串封装成了Integer对象,并调用对象的方法intValue();2:使用Integer.parseInt(numstring) ...

  4. mongodb用mongoose得到的对象不能增加属性解决

    一,先定义了一个goods(商品)的models var mongoose = require('mongoose'); var Schema = mongoose.Schema; var produ ...

  5. ORACLE——日期时间格式化参数详解 之二

    2.8 DD 指定日期在当月中第几天(范围:1-31) SQL> select to_char(sysdate,'DD YYYY-MM-DD PM hh24:mi:ss ') from dual ...

  6. 监控和安全运维 1.3 cacti增加客户端监控

    二. 安装客户端(增加一个linux服务器) 1.在客户端上 安装snmp yum install -y net-snmp 2. 修改snmpd.conf vim /etc/snmp/snmpd.co ...

  7. AudioManager 音量『转』

    获取系统音量 通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManager提供了方法: publicvoidsetStream ...

  8. session详解&和cookie的区别

    session简介 1. 定义 session用来保存会话数据, 将数据保存到服务器中. 2. 作用 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),一个浏览器独占一 ...

  9. JVM实用参数(一)JVM类型以及编译器模式

    JVM实用参数(一)JVM类型以及编译器模式 原文地址:https://blog.codecentric.de/en/2012/07/useful-jvm-flags-part-1-jvm-types ...

  10. Codeforces 1136F Cooperative Game (神仙题)

    这种题就是难者不会,会者不难. 博客讲的很详细了 代码: #include <bits/stdc++.h> using namespace std; string s; int read( ...