Printf函数进栈顺序
  hXqfRqhGg9it 2023年11月02日 109 0


Printf函数进栈顺序


示例说明程序1


# include <stdio.h>



main()



{



int i=1;



printf(”%d %d %d”, i , i++, i++);



}进栈顺序:


1. i=1;算最后一个i++,i=2;将加之前i的值1送入堆栈。


2. i=2;算倒数第二个i++,i=3;将加之前i的值2送入堆栈。


3. i=3;计算i,i=3;将加之前i的值3送入堆栈。


输出结果为(出栈顺序):3 2 1


示例说明程序2

# include <stdio.h>



main()



{



int i=1;



printf(”%d %d %d”, i , ++i, ++i);



}进栈顺序:


1. i=1;算最后一个++i,i=2;将加之后i的值2送入堆栈。


2. i=2;算倒数第二个++i,i=3;将加之后i的值3送入堆栈。


3. i=3;计算i,i=3;将加之后i的值3送入堆栈。


输出结果为(出栈顺序):3 3 2


示例说明程序3

# include <stdio.h>



main()



{



int i, j, k; i=1; j=2; k=3;



printf(”%d %d %d”, i , j, k);



}进栈顺序:


1. k=3;算k,k=3;将k的值3送入堆栈。


2. j=2;算j,j=2;将j的值2送入堆栈。


3. i=1;计算i,i=1;将i的值1送入堆栈。


输出结果为(出栈顺序):1 2 3 


C语言都是从右向左入栈的。

Pascal语言是从左到右。

编译器相关。

结论:
我们应尽量避免假设函数入栈顺序是自右向左的, 并无畏的加以应用.
不管是编译器bug, 还是其它, 我们都要要考虑不同编译器/版本差异会引起的结果差异.

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ZydNzX6XOBO2   2023年11月02日   50   0   0 数据i++iosC++
  ZydNzX6XOBO2   2023年11月02日   50   0   0 i++C语言#include
  hXqfRqhGg9it   2023年11月02日   110   0   0 i++堆栈进栈
hXqfRqhGg9it