温故而知新_C语言_前缀++(--)和后缀++(--)
前缀++(--)和后缀++(++)是有区别的。
再单独使用的时候是没有区别的,都是自身递增或者递减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语言_前缀++(--)和后缀++(--)的更多相关文章
- 温故而知新_C语言_递归
递归. 是的,差不多就是这种感觉.上面就是类似递归的显示表现. 2017 10 24更新: 递归这个问题放了很久.也没有写.大概是自己还没有好好理解吧. 在这里写下自己理解的全部. 一 何为递归. 字 ...
- 选择排序_C语言_数组
选择排序_C语言_数组 #include <stdio.h> void select_sort(int *); int main(int argc, const char * argv[] ...
- 插入排序_C语言_数组
插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...
- 快速排序_C语言_数组
快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...
- 冒泡排序_C语言_数组
冒泡排序_C语言_数组 #include <stdio.h> //冒泡排序 小->大 void sort(int * pArray, int len); int main(int a ...
- 温故而知新_C语言_define_宏
define defi ...
- 数据结构_C语言_二叉树先序、中序、后序遍历
# include <stdio.h> # include <stdlib.h> typedef struct BiTreeNode { char data; struct B ...
- 数据结构_C语言_单链表
# include <stdio.h> # include <stdbool.h> # include <malloc.h> typedef int DataTyp ...
- 【书籍下载链接】_1_第一轮_C语言书籍
各位朋友,如果您觉得下载的电子书,看的还可以,请购买纸质版的图书,如果您觉得 您下载的书,不值得一看请在下载后直接删除. Windows汇编:http://dl.vmall.com/c0jk1v970 ...
随机推荐
- .Net学习资源整理
.Net学习资源整理 ASP.NET Core
- QtCreator开启-O编译优化的方式
首先,编译优化必须是在Release模式下进行,保证程序没有任何bug的条件下进行执行.编译优化能极大提升程序的运行效率,级别越高速度越快,但是对代码健壮性要求也越高! 选择编译release模式,在 ...
- HP 防止cciss设备被DM映射
http://h10025.www1.hp.com/ewfrf/wc/document?cc=cn&lc=zh-hans&dlc=zh-hans&docname=c034933 ...
- linux中普通用户修改密码出现(passwd:Authentication token manipulation error)
如果在linux中,不管是root用户还是普通用户登录后,修改自己的密码,出现---passwd:Authentication token manipulation error---错误的解决办法: ...
- python中的 ' ' 和 " "
#!/usr/bin/python import MySQLdb try: conn = MySQLdb.connect(host = 'localhost', user = 'root', pass ...
- leetcode589
树的先序遍历,使用递归实现. class Solution { public: vector<Node> Tree; void preTree(Node node) { Tree.push ...
- leetcode482
这道题主要使用了C++的几个API,大小写转化,字符串替换.其余的逻辑都比较简单.而且经查资料,string类字符串拼接的速度使用+=的速度是很快的.以下代码,也是用的+=来拼接字符串. string ...
- ssh框架搭建实例代码教程步骤
http://blog.csdn.net/u010539352/article/details/49255729
- MyBatis总结六:resultMap详解(包含多表查询)
简介: MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对 ...
- day70-oracle PLSQL_02光标
涨工资之前员工的工资. 如果PLSQL程序没有commit的话,命令行这边的客户端是无法读到的.这是oracle数据库的隔离级别. 为什么在PLSQL程序中commit之后还是不行呢? PLSQL程序 ...