c语言++放在前面和后面的区别分析
咱们先看第一个
i被赋值0,i++(后++)并没有输出1。
现在i被赋值0,++i,也就是前++后输出了1。
i被赋值0,前++ 的话,就是自身先加1 就自身赋值变成1 ,后面的i的值都是1了。
i被赋值0,先是后++,后++意思是 自己先被赋值,赋值完后等本语句结束后就自己加1了。第一个printf输出的是i开始被赋的值0, 第一个printf之后就是一个(;)分号,分号意思是这个语句的结束。 这条语句结束,这时候i就偷偷的自己加上1了,第2个printf输出的就是上一个语句处理后i的值了。
i被赋值0,i++ ; 这是一条语句。因为有分号。 我们说 后加加 就是 先自己赋值,然后等待本语句结束时自己再加1。 i++ ; 执行的结果就是 0+1=1了。printf只管输出 i的值了。
i先被赋值0, i++后面带个分号“;” 就是这条语句结束, i++;处理的结果是 0+1=1 后面的i 的值便是1了。
i被赋值为0,++i; 前++就是自己先加1,再赋值给自身。 ++i; 处理 的结果是 0+1=1。
i先赋值为0,++i; (前++)就是 自己先0+1=1,然后把1再赋值给自己 i就变成了1 i++; (后++) 前面i已经被赋值为1了,这里i++; 也就是先把上一个i的值1 赋给自己变成1,但是遇到分号(;)意味着这条语句的结束, 语句结束i++; 就执行1+1=2 了。
i被赋值为0,前++, i就变成1 printf里面的i++ 输出的只能是自己被赋的那个值1 如果下面再加个printf("%d",i);的话输出的i就是为2了
总结: 前++就是 先自己加1,加完后赋值给自己。 后++就是 先自己赋值,赋完值还必须等语句结束才能加1。
口诀:前+ 后赋。这是我想的。 意思是:前面++ 第一步先加+1 后赋 就是后++的 就先赋值。 此外前-- 与后-- 道理也是一样的。
综上:++在前是先加1在运算, 在后面是先运算在加1
例子如下。
int i=0; printf("%d",++i);i加了1才给传递参数,所以输出是1 i=0; printf("%d",i++)前传递参数,所以还是输出原来的值是0 printf("%d,i) 因为上面那句加了1所以 输出是1
相关推荐
-
C语言中6组指针和自增运算符结合方式的运算顺序问题
在C语言中,当指针运算符和++或者–结合时很容易分不清运算顺序,在这里总结一下,下面一共分析6中组合: * p++,(* p)++,* (p++),++* p,++( * p), * (++p). 先看段代码以及输出: #include<stdio.h> int main() { int a[3]={1,3,5}; int *p=a; printf("----------------1----------------\n"); printf("%d\n"
-
C语言位运算符:与、或、异或、取反、左移与右移详细介绍
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将
-
C语言 解决不用+、-、×、÷数字运算符做加法的实现方法
题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+.-.×.÷. 分析:这又是一道考察发散思维的很有意思的题目.当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在. 看到的这个题目,我的第一反应是傻眼了,四则运算都不能用,那还能用什么啊?可是问题总是要解决的,只能打开思路去思考各种可能性.首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+17=22这个结果的.实际上,我们可以分成三步的:第一步只做各位相加不进位,此时相加的结果是12(个位数
-
C语言自增(++)和自减(--)实例详解
一个整数自身加一可以这样写: a+=1; 它等价于a=a+1;. 但是在C语言中还有一种更简单的写法,就是a++;或者++a;.这种写法叫做自加或自增:意思很明确,就是自身加一. 相应的,也有a--和--a,叫做自减,表示自身减一. ++和--分别称为自增和自减运算符. 自增和自减的示例: #include <stdio.h> #include <stdlib.h> int main() { int a = 10, b = 20; printf("a=%d, b=%d\n
-
C++位运算符详解(异或运算符和移位运算符)
什么是位运算 位运算符按二进制进行运算,这些运算符只能用于整数类型的操作.如:char,short,int,long 通过位运算符来获取高位值和低位值 int a=0x1234; int high,low; high = (a>>8) &0x00ff; low = a & 0x00ff; 左移运算符和右移运算符(<<和>>) 左移是将一个二进制数,移动若干位,右边空出的位置用0来填补,高位左移溢出应该舍弃该高位. 如:inta = 8, a = 0000
-
C语言运算符优先级列表(超详细)
每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖! C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 -- 2 - 负号运算符 -表达式 右到左 单目运算符 ~ 按位取反运算符 ~表达式 ++ 自增运算符 +
-
c语言中用位运算实现加法技巧介绍
用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下 复制代码 代码如下: 1 + 1 = 0 1 + 0 = 1 0 + 1 = 1 0 + 0 = 0 很明显这几个表达式可以用位运算的"^"来代替,如下 复制代码 代码如下: 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0 这样我们就完成了简单的一位数加法,那么要进行二位的加法,这个方法可行不可行呢?肯定是不行的,矛盾
-
c语言++放在前面和后面的区别分析
咱们先看第一个 i被赋值0,i++(后++)并没有输出1. 现在i被赋值0,++i,也就是前++后输出了1. i被赋值0,前++ 的话,就是自身先加1 就自身赋值变成1 ,后面的i的值都是1了. i被赋值0,先是后++,后++意思是 自己先被赋值,赋值完后等本语句结束后就自己加1了.第一个printf输出的是i开始被赋的值0, 第一个printf之后就是一个(:)分号,分号意思是这个语句的结束. 这条语句结束,这时候i就偷偷的自己加上1了,第2个printf输出的就是上一个语句处理后i的值了.
-
Java语言----三种循环语句的区别介绍
第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; } eg: class Dome_For2{ public static void main(String[] args) { //System.out.println("Hello World!"); //求1-10的偶数的和 int sum = 0; for (int i = 1;i<=10 ; i++ ) { if (i%2 ==0) { //判断语句
-
详解易语言绝对取整和取整的区别
易语言绝对取整和取整的区别,希望大家都能学懂. 非无私奉献,拒绝看经验不回复,学懂了记得按照下面做: 在底部点击相关按钮,给我投票和点赞. 有心得或者疑问,点击相关按钮反馈. 具体操作请看图. 1.易语言新建一个windows窗口 点击进入代码编辑区 2.我们输入绝对取整() 展开看看 发现只有一个参数 3.在输入取整() 展开看看 发现还是只有一个参数 4.看上去没有什么不同 我们举个例子 我们把这个参数都设为-7.8 5.我们在输入调试输出 用法如图所示 6.然后运行 通过结果发现 绝对取整
-
Go语言原子操作及互斥锁的区别
目录 增或减 比较并交换(Compare And Swap) 载入与存储 交换 原子值 原子操作与互斥锁的区别 原子操作就是不可中断的操作,外界是看不到原子操作的中间状态,要么看到原子操作已经完成,要么看到原子操作已经结束.在某个值的原子操作执行的过程中,CPU绝对不会再去执行其他针对该值的操作,那么其他操作也是原子操作. Go语言中提供的原子操作都是非侵入式的,在标准库代码包sync/atomic中提供了相关的原子函数. 增或减 用于增或减的原子操作的函数名称都是以"Add"开头的,
-
C++数组放在main函数内外的区别
目录 思路 错误代码 正确代码 问题分析 总结 先来看一道小题,第十届蓝桥杯省赛C++/B组填空题第三题 试题 C:数列求值 本题总分:10 分 [问题描述] 给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和.求第 20190324 项的最后 4 位数字. [答案提交] 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一 个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写多余的内容将无法得分. 思路 显然,
-
C++中关于[]静态数组和new分配的动态数组的区别分析
本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加深对C++语言数组的理解.具体区别如下: 一.对静态数组名进行sizeof运算时,结果是整个数组占用空间的大小: 因此可以用sizeof(数组名)/sizeof(*数组名)来获取数组的长度. int a[5]; 则sizeof(a)=20,sizeof(*a)=4.因为整个数组共占20字节,首个元素(int型)占4字节. int *a=new int[4];则sizeof(a)=sizeof(*a)=4,因为
-
面试题:react和vue的区别分析
react和vue是什么?有啥区别吗? 三大框架之二,大家应该都不会陌生,都有学习过或者开发中使用. 但是他们到底有啥区别呢?这个就是我们这篇文章所需探讨并学习的. 开始! MVC 和 MVVM 首先,来说明下这些字母代表的含义 M:Model 模型 V:View 视图 C:Controller 控制器 VM:ViewModel 视图模型 首先说下MVC,大家肯定也知道三大框架中的另外一个(anuglar). 如果你写过angular那就肯定能很清楚的了解这个含义,看如下代码: <input n
-
JavaScript中Object、map、weakmap的区别分析
前言 ECMAScript 6以前,在JavaScript中实现"键/值"式存储可以使用Object来方便高效地完成,也就是使用对象属性作为键,再使用属性来引用值.但这种实现并非没有问题,为此TC39委员会专门为"键/值"存储定义了一个规范.作为ECMAScript 6的新增特性,Map是一种新的集合类型,为这门语言带来了真正的键/值存储机制.Map的大多数特性都可以通过Object类型实现,但二者之间还是存在一些细微的差异.具体实践中使用哪一个,还是值得细细甄别.
-
汇编语言教程文件后缀大小写S区别分析详解
目录 一.大小写后缀的区别 二.编译的相关流程 1.预处理器 2.编译阶段 3.汇编阶段 4.链接阶段 一.大小写后缀的区别 .s 汇编语言源程序;汇编 .S 汇编语言源程序;预处理,汇编 小写的s文件,在后期阶段不在进行预处理操作,所以我们不能在这里面写预处理的语句在里面 大写的S文件,还会进行预处理.汇编等操作,所以我们可以在这里面加入预处理的命令 二.编译的相关流程 预处理(Pre-Processing)-->编译(Compiling)-->汇编(Assembling)-
-
C语言 动态内存开辟常见问题解决与分析流程
目录 前言 一.动态内存错误 1.对NULL指针的解引用操作 2.对动态开辟空间的越界访问 3.使用free释放非动态开辟的空间 4.使用free释放动态内存中的一部分 5.对同一块动态内存动态开辟的空间多次释放 6.动态开辟的空间忘记释放(容易造成内存泄露,比较严重) 二.动态内存错误面试题分析 1.NULL指针传参不取地址传的也是一份临时拷贝 2.局部变量和形式参数存在于栈上 3.动态内存开的空间记得free释放掉 4.非法访问内存 总结: 前言 当我们用动态内存分配函数来编写程序时,在编写
随机推荐
- 简单介绍MySQL中GROUP BY子句的使用
- sina的lightbox效果。
- 利用Python画ROC曲线和AUC值计算
- Python时间戳与时间字符串互相转换实例代码
- js数组常见操作及数组与字符串相互转化实例详解
- asp.net 网页编码自动识别代码
- JavaScript学习笔记(十七)js 优化
- 使用mysqldump实现mysql备份
- JS实现字符串转日期并比较大小实例分析
- 深入浅出 jQuery中的事件机制
- js生成缩略图后上传并利用canvas重绘
- js常用函数2008-8-16整理第1/2页
- GOOGLE网站向网站管理员提供的建议一定要看的
- Android开发-之监听button点击事件的多种方法
- Android 自定义一套 Dialog通用提示框 (代码库)
- 基于barcodescanner实现Android二维码扫描功能
- 在C#中调用VBScript、javascript等脚本的实现代码
- 浅谈Android为RecyclerView增加监听以及数据混乱的小坑
- 无线局域网络简介一
- 浅谈golang slice 切片原理