C语言中的printf函数的输入输出问题

这个问题是个很基础,但是我一直不知道的问题,是同学问了之后才知道的,长知识了。

这里要注意的是,printf函数是从右向左计算,从左向右输出。

距离如下:

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

此程序输出结果为:7, 7, 8, 8。原因是,printf()函数中,i++,i-- 时,i的值是在printf()函数之后才会被刷新,所以在printf()函数中,i++,i-- 对i的值暂时不产生影响,而++i、--i会有影响。

实际这里是涉及到printf的运行规则问题,是先入栈再出栈,然后再输出。具体如下。

对于printf函数中的参数,按照入栈顺序进入栈堆,然后先入栈者到栈底,后入栈者到栈顶,完成后,开始计算,由栈顶开始计算,先出栈者为printf函数中的右侧参数,计算完后接着出栈,然后计算下面的元素,这样,printf函数中的第一个元素就成为最后一个计算的元素,然后再按照由右向左的顺序将计算结果输出,所以上述例子的结果如是。

以此记录,以供学习!

时间: 2024-12-25 01:20:57

C语言中的printf函数的输入输出问题的相关文章

C语言中的system函数参数详解

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数执行命令和在DOS窗口中执行命令的效果是一样的,所以只要在运行窗口中可以使用的命令都可以用SYSTEM()

c语言中的rewind函数,Win CE 不支持,可用fseek函数替换

FILE *read = fopen(cXmlFile,"rb"); if (read) { fseek(read, 0L, SEEK_END); int len = ftell(read); // c语言中的rewind函数就是把文件指针从你现在读取的位置,重新指向文件开头 // Win CE 不支持该函数,可用fseek函数替换 // rewind(read); fseek(read,0L,SEEK_SET); …… …… }

C语言中的system函数參数具体解释

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,能够直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数运行命令和在DOS窗体中运行命令的效果是一样的,所以仅仅要在运行窗体中能够使用的命令都能够用SYSTEM(

C语言中的printf(),sprintf(),scanf(),sscanf()

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf 比printf 有用得多. printf 语法: #include <stdio.h> int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.返回

c语言中的malloc函数

少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小. 函数:void *malloc(int size); malloc 向系统申请分配指定size个字节的

C语言中 v...printf类函数的用法

C语言的自学渐渐接近尾声,今天学到了标准库中的stdarg.h头,里面关联了stdio.h头里面的一类函数:v...printf函数,里面举的例子看了之后还是不太明白,google了一下依旧不是很懂,所以自行测试了一下,以下是过程: 这一类函数书中列举了四个,原型分别有: int vfprintf(FILE *restrict stream, const char * restrict format, va_list arg); int vprintf(const char * restrict

C 语言中的printf()多参数输出问题

问题: x=1; y=2; printf("%d",x+y,x++,y++); 输出结果为什么是5? 首先解释一点,x+y,x++,y++是逗号表达式,逗号表达式的结果是最后一个表达式的结果. 但是在这里printf()函数是从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所以我们看见的结果是,从右边开始处理的. 读取入栈:                                                           处理计算:  

浅析C语言中的rand函数和srand函数(一)

我们在编程解决问题的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的rand函数,生成的也是伪随机数. 一个简单的示范如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 int 6 main(int argc, char** argv) 7 { 8 // 以机器当

C 语言中struct的函数实现

#include <stdio.h> typedef struct _test { void (*pFunction)(); }STest; void display() { printf("hello function\n"); } void main(void) { STest test; test.pFunction = display; test.pFunction(); } C语言中不像C++能够直接定义函数,以前学习数据结构用的是C++版的数据结构,对C++的新