printf()函数的参数,在printf()函数读取时是从左往右读取的,然后将读取到的参数放到栈里面去,

最后读取到的就放在栈顶,处理参数的时候是从栈顶开始的,所以是从右边开始处理的.
                                  --printf()函数的特点. 所以printf的执行顺序是从 从右到左进行运算
注意:我们在写代码时,尽量避免无确定意义的表达式出现,因为不同的编译器,可能会采用不同的理解方式.

附上一个例子:

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

首先,应该说明的是在不同的编译环境中结果是不一样的。

关于本段代码在VC++6.0中的规则如下: 
1、printf函数的执行顺序是由右到左的 
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1; 
3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的!

所以: 
printf("%d,%d,%d,%d,\n",i++,++i,i,i++); 
从右往左运算: 
i++得到2(i=2,后加1在整条语句执行完才进行,这里先记下) 
i还是2 (i=2,原因见上一行) 
++i得到3(i=3,先加1,后使用) 
i++得到3(i=3,后加1在整条语句执行完才进行,这里先记下) 
所以输出结果为:3,3,2,2 
然后计算刚才的两次后自增运算后,i=5

printf("%d\n",i); 
所以,结果是5

参考链接:http://blog.csdn.net/bingxuewujian/article/details/6728396

printf的执行顺序的更多相关文章

  1. C: printf参数执行顺序与前置后置自增自减的影响

    起源: 今天在了解副作用side-effect的过程中,看到了下面的网页,把我带到了由printf引起的一系列问题,纠结了一整天,勉强弄懂. 第一个代码没什么好解释的.而第二个printf(" ...

  2. for循环执行顺序

    for循环的执行顺序用如下表达式: for(expression1;expression2;expression3) { expression4; } 执行的顺序应该是: 1)第一次循环,即初始化循环 ...

  3. pthread_create多线程执行顺序诡异现象

    多线程执行顺序诡异现象谈,你不知道的pthread_create 引文:学而时习之,不亦说乎.总是忙于具体项目,业务功能的实现:关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点 ...

  4. (转)java for循环的执行顺序和几种常用写法

    算是温习吧.问题比较基础,但是也比较重要.(虽然是C,但是很经典) for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式. 但是这三个部分的执行顺序是什么,这是我们 ...

  5. C++ 构造与析构的执行顺序

    1.代码如下:class A{public: int _Id; A():_Id(0) { printf("A[%d]\n",_Id); } ~A() { printf(" ...

  6. 多线程执行顺序诡异现象谈,你不知道的pthread_create

    引文:学而时习之,不亦说乎.总是忙于具体项目,业务功能的实现:关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点放在了多线程和多进程上,跑了一个实例,居然有新的发现: (1)多个 ...

  7. - > 贪心基础入门讲解五——任务执行顺序

    分析: 本题可以抽象成,从一个整数开始,每次减去a,再加上b (a,b都是正数),要求每次操作都不产生负数. 针对本题a[i] = R[i], b[i] = R[i] – O[i],注意O[i] &l ...

  8. goroutine 分析 协程的调度和执行顺序 并发写

    package main import ( "fmt" "runtime" "sync" ) const N = 26 func main( ...

  9. 一个有关Golang Deferred Function 执行顺序的问题

    先看一下一段关于defer的解释, 引自<Go程序设计语言> Syntactically, a defer statement is an ordinary function or met ...

随机推荐

  1. js 拖拽 碰撞 + 重力 运动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. OpenCV入门(1)- 简介

    1.图像的表示 在计算机看来,图像只是一些亮度各异的点,一副M*N的图片可以用M*N的矩阵来表示,矩阵的值表示这个位置上像素的亮度. 一般灰度图用二维矩阵来表示,彩色(多通道)图用三维矩阵表示,大部分 ...

  3. [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)

    [POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...

  4. python yield from

    def kk(): print (1) yield print (2) return 3 k=kk() def hello(k): print("Hello world!") r ...

  5. B. Array

    题目链接:http://codeforces.com/contest/224/problem/B 具体大意: 输入n,m. 给你一个区间,让你找某一段区间中包含m个不同的数,并且这段区间中的某一个小区 ...

  6. 12章 搜索框架ElasticSearch介绍和整合SpringBoot 4节课

    1.搜索引擎知识和搜索框架elasticsearch基本介绍     简介:通过京东电商 介绍什么是搜索引擎,和开源搜索框架ElasticSearch6.x新特性介绍 前言:介绍ES的主要特点和使用场 ...

  7. Java编程:悲观锁、乐观锁的区别及使用场景

    定义: 悲观锁(Pessimistic Lock): 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁.由于 ...

  8. 一套oracle的练习题

    create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ssex varchar ...

  9. 使用密钥认证机制远程登录Linux

    密钥认证机制 创建存放key的文件 1)创建目录 /root/.ssh 并设置权限 [root@localhost ~]# mkdir /root/.ssh mkdir 命令用来创建目录,以后会详细介 ...

  10. python f-string

    文章目录 1. 主要内容 1.1. 旧时代的格式化字符串 1.1.1. Option #1: %-formatting 1.1.2. 怎样使用 %-formatting 1.1.3. 为什么 %-fo ...