#include<stdio.h>
void main()
{
int i=8;
printf(" %d\n %d\n %d\n %d\n %d\n %d\n",++i,--i,i++,i--,-i++,-i--);
}
#include<stdio.h>
void main()
{
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
}
两者的区别
像这种问题应该与编译器有关,在vc环境下的结果是8788-8-8
因为,在vc下,printf函数中,右自增自减是无法实现的,也就是等于没有,可以看看反汇编的代码
0040D78F mov eax,dword ptr [ebp-4]
0040D792 neg eax
0040D794 mov dword ptr [ebp-8],eax
0040D797 mov ecx,dword ptr [ebp-8]
0040D79A push ecx
这是最后一个参数的反汇编,因为在C语言中,参数的调用,是从右到左的参数压入堆栈,所以先压入的是最后一个I,由于用了负号,所以,最后一个是-8,从右到左第二个一样,也用了负号,所以也是-8依此第三个,没有加负号,所以是8,再依次,还是8,最后两个,也就是从左到右第一二个,从右到左第5 ,6个,开始有变化了,我可以给你反汇编的代码看看,他们是左自增(自减),也就是先自增再使用,所以从右到左第5个,是7,是由于它自减,你可以看看反汇编代码
0040D7BB mov edx,dword ptr [ebp-4]
0040D7BE sub edx,1
0040D7C1 mov dword ptr [ebp-4],edx
0040D7C4 mov eax,dword ptr [ebp-4]
0040D7C7 push eax
可以看到,先是把i的值给了寄存器值是8,再减-1就是7了,再把值赋值给i,那个,[ebp-4]就是i的地址,压入堆栈的时候是7,再看看最后压入堆栈的,
0040D7C8 mov ecx,dword ptr [ebp-4]
0040D7CB add ecx,1
0040D7CE mov dword ptr [ebp-4],ecx
0040D7D1 mov edx,dword ptr [ebp-4]
0040D7D4 push edx
开始,[ebp-4]由于开始已经是7了,所以,add 加1后,就是8了,再把8给,[ebp-4]所以,最后i的值还是8,压入堆栈的时候,edx是8,所以,依此排列下来,压入的顺序就是,
-8
-8
8
8
7
8
最后堆栈的特点你应该了解吧,先入的后出,也就是,从下面开始调出,
最后,就是
8788-8-8
看C看不懂的时候, 可以反汇编看下。
- 浏览: 108875 次
- 性别:
- 来自: 北京
相关推荐
C语言中printf格式详细介绍 在 C 语言中,printf 函数是一个非常重要的输出函数,它可以根据不同的格式化字符串来输出各种类型的数据。在本文中,我们将详细介绍 printf 函数的使用方法和格式化字符串的规定符。 ...
《C语言中printf函数的功能注解》 C语言是一门基础且强大的编程语言,其中的printf函数是进行输出操作的核心工具。本文详细阐述了printf函数的功能,并提供了在使用过程中应注意的事项,旨在帮助读者更准确、高效地...
### C语言中printf函数的功能注解 #### 一、引言 在C语言编程中,基本的输入输出功能主要是通过调用标准库函数实现的。其中,`printf`函数是功能强大且常用的输出函数之一。本文将详细介绍`printf`函数的功能,并...
printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为: printf("<式样化字符串>",<参量表>);
在C语言中,`printf`函数是一个非常重要的输出函数,用于在控制台上打印各种类型的数据。这篇文章详细介绍了`printf`函数的功能以及使用时需要注意的事项,对于理解和掌握C语言的基本输入输出具有指导意义。 首先,...
C语言中printf()缓冲问题详解 C语言中printf()缓冲问题是指在使用printf()函数时,因为缓冲机制的存在,可能会出现输出结果的延迟或不确定性。本文将详细介绍C语言中printf()缓冲问题的相关知识,包括缓冲...
C语言里printf函数格式控制符的完整格式 printf的格式控制的完整格式: % - 0 m.n l或h 格式字符
C语言printf()函数:格式化输出函数 printf()函数是最常用的格式化输出函数,其原型为: int printf( char * format, ... ); printf()会根据参数 format 字符串来转换并格式化数据,然后将结果输出到标准输出...
在C语言中,`printf`函数是用于格式化输出数据的标准库函数,它在`stdio.h`头文件中被定义。这个"C语言实现Printf函数完整工程文件"提供了一个自定义实现`printf`功能的机会,这有助于理解其内部工作原理,并可以...
### C语言printf函数详解 #### 一、printf函数概述 `printf`函数是C语言中最常用的输出函数之一,用于向标准输出设备(通常是屏幕)输出指定格式的数据。它定义在`stdio.h`头文件中,因此在使用时需要包含此头文件...
在单片机编程中,使用C语言的`printf`函数是一项基础且重要的技能,特别是在进行串口通信时。`printf`函数允许开发者以格式化的字符串输出数据,这对于调试和信息传递非常有用。在51单片机上实现`printf`功能,需要...
在郝斌老师的资料中提到的“输出十六进制格式,%x,或者%#X(大写的X)”,这是C语言中printf函数的一个重要应用实例。在C语言中,`printf`函数用于格式化输出字符串到标准输出设备(通常是屏幕)。其中,`%x`和`%#X...
“C语言”标签表明这个函数是基于C语言实现的,C语言在单片机编程中广泛使用,因为它提供了直接访问硬件的能力,且代码较为高效。“printf”标签直接指出了讨论的核心,即对`printf()`函数的改进。“单片机”标签则...
C语言中printf的用法
printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中。返回值是输出的字符数量。sprintf语法: #include <stdio>int sprintf( char *buffer, const char *format, … );sprintf()函数和...
在C语言中,printf函数是一个非常重要的标准输入输出库函数,广泛用于程序的数据输出。它的作用是根据给定的格式控制字符串,将输出表列中指定的数据输出到显示器或其他指定的输出设备。printf函数属于C语言标准库中...
printf 函数是 C 语言中一个常用的输出函数,它可以将格式化的字符串输出到标准输出设备上。在嵌入式开发领域中,printf 函数经常被重定义以满足特定的需求。本文将详细介绍 printf 函数的原型和重定义方法。 一、...