`

printf函数的一个问题

 
阅读更多

      看看如下代码,猜猜会打印出什么?

        int i=1;
	printf("%d %d\n",i++,i++);

 输出结果竟然是:

                   2   1

是不是感到很奇怪?

原因:printf是最右侧的元素先入栈,所以右边的i++中的i先入站占4个字节此时入栈元素为0x00000001,接下来左边的这个i++中的i入栈,此时i已经变成了2(0x00000002)。由于x86是小端存储,所以栈中的情况是这样的:

            栈顶  02 00 00 00   01 00 00 00   栈底

输出时从栈顶弹出:先弹出2,再弹出1。

打完收工。

分享到:
评论

相关推荐

    printf函数的原型和重定义

    printf 函数是 C 语言中一个常用的输出函数,它可以将格式化的字符串输出到标准输出设备上。在嵌入式开发领域中,printf 函数经常被重定义以满足特定的需求。本文将详细介绍 printf 函数的原型和重定义方法。 一、...

    printf函数输出格式

    `printf`的格式控制字符串通常由一个百分号(%)开始,后面跟着一个或多个前导字符和一个格式字符。前导字符包括: 1. `-`:指定左对齐输出。如果不指定,输出默认右对齐。 2. `0`:指定在填充空位时使用0而不是...

    Printf函数的分析与实现过程(简单实例)

    Printf函数的分析与实现过程(简单实例).讲述了printf函数的实现原理,及printf 函数的简单实例

    C语言版本的第三方printf函数实现

    该项目来源于GitHub上的开源库,作者为mpaland,其主要目标是提供一个轻量级的printf函数,以满足单片机程序开发的需求。与标准库中的printf相比,这个实现通常会产生更小的二进制文件,这是因为它是针对特定目标...

    关于 51 单片机使用 printf 函数的 2 种方法.pdf

    单边机编程中总会用到printf函数作为调试工具,编译器自带printf函数只能使用uart1,但是有时候有于硬件限制,实际的调试串口不一定是 uart1,所以我总结以下 2 种整改 printf函数的方法,使得 uart1,uart2,uart3...

    Printf函数的实现

    在C语言中,printf函数是一个标准的输出函数,它属于可变参数函数,用于向标准输出流打印各种类型的数据。由于C语言不支持函数重载,因此在设计时需要一种机制来处理不定数量的参数。在本篇文章中,我们将深入探讨...

    printf函数移植范例.rar

    "printf函数移植范例.rar"提供的就是一个针对MSP430单片机的`printf`函数移植实例。 MSP430是由德州仪器(TI)推出的一种超低功耗的16位单片机系列,广泛应用于各种嵌入式应用,如传感器节点、便携式设备和物联网...

    printf函数详细解释

    ### printf函数详细解释 `printf`函数是C和C++编程语言中用于格式化输出文本的强大工具。在本文中,我们将深入探讨`printf`函数的工作原理、格式化字符串的细节以及如何灵活运用它来实现多样化的输出需求。 #### 1...

    printf函数实现详解

    printf 函数是 C 语言中一个非常重要的函数,它可以将格式化后的字符串输出到标准输出设备上。下面是对 printf 函数的实现详解。 一、printf 函数的定义 printf 函数的定义如下所示: ```c int _cdecl printf...

    printf函数族用法大全

    ### printf函数族用法详解 #### 一、概述 `printf`函数族是C语言中极为重要的函数之一,主要用于格式化输出数据。该家族包括多种不同的函数,它们各自有不同的应用场景和特点。本篇文章将详细介绍`printf`函数族的...

    C51 单片机 利用printf函数输出字符串

    工程是keil2. 简单的利用C51单片机,实现了printf函数输出字符串,数字等。 找了好多资料,然后自己总结了下,实现了printf函数的应用。 有了printf函数,你就可以像VC中一样实现输出了。

    Keil MDK环境下使用printf函数的解决方法 .txt

    ### Keil MDK环境下使用printf函数的解决方法 #### 概述 在嵌入式开发过程中,`printf()`函数作为一种非常实用的调试工具被广泛使用。它可以将变量或字符串等数据格式化输出到屏幕或其他输出设备上,帮助开发者...

    STM8L串口用printf函数进行重定义

    在开发过程中,我们有时需要通过串口输出调试信息,这时printf函数就显得非常方便。然而,STM8L的固有库通常不包含标准C库的完整实现,特别是对于printf这样的复杂函数,因此需要我们自己来实现或重定义。 在STM8L...

    深入剖析printf函数

    实现一个简单的printf函数需要使用内嵌汇编代码,将字符串的首地址和长度放入寄存器中,并发起一个系统调用。由于汇编语言依赖于具体平台的指令集架构,不同的CPU架构(如x86, ARM等)有不同的汇编指令集。 ### ...

    printf函数返回值

    printf函数返回值

    自己的串口printf函数实现

    为了克服这个问题,我们可以自定义一个printf函数,实现对任意串口的输出。 自定义串口printf函数的核心在于理解printf函数的工作原理。printf是一个格式化输出函数,它根据指定的格式字符串和参数,将处理后的结果...

    puts学案函数和printf函数的区别.pdf

    puts函数和printf函数的区别 puts函数和printf函数都是C语言中用于输出字符串的函数,但它们有着 significative 区别。 1. puts函数: puts函数只用来输出字符串,没有格式控制,里面的参数可以直接是字符串或者...

    Printf函数的实现.ppt

    `printf`函数是C语言中的一个非常重要的标准输入输出函数,用于格式化输出数据。它在C语言中扮演着至关重要的角色,让我们深入探讨它的实现原理、使用方法以及相关知识点。 首先,`printf`函数的基本语法是基于...

    printf函数源程序c

    如果后续参数的类型是变化而且是未知的,则必须通过一个参数中设定模式来匹配后续参数的个数和类型,就像printf一样; 当然我们可以定义自己的模式,如可以用i表示int参数,d表示double参数; 为了简单,我们用一个...

    printf函数源程序b

    如果后续参数的类型是变化而且是未知的,则必须通过一个参数中设定模式来匹配后续参数的个数和类型,就像printf一样; 当然我们可以定义自己的模式,如可以用i表示int参数,d表示double参数; 为了简单,我们用一个...

Global site tag (gtag.js) - Google Analytics