【发布时间】:2014-09-13 18:31:40
【问题描述】:
首先,这是我在这里的第一个问题,请原谅我的任何错误.. 我在下面遇到了这个程序:
#include<stdio.h>
main()
{
int i=2;
void add();
add(i++,--i);
printf("/ni=%d ",i);
}
void add(int a ,int b)
{
printf("/na=%d b=%d",a,b);
}
输出是:
a=1 b=2
i=2
这也发布在下面的链接中:
Pre increment and post increment function call
当我做了一个小实验时,我发现如果你声明“int i;”全局,然后输出变化为:
a=1 b=1
i=2
当我搜索解释时,我发现在函数调用中,参数总是从右侧推入堆栈。 这解释了第一个输出,但你如何解释第二个输出?
如果变量是全局变量,如何评估后增量和前增量? 还是我理解错了?
【问题讨论】:
-
您的链接已经解释了您的问题的答案。这是未定义的行为。
-
这两种方式都是未定义的行为。
-
请看this
-
"在函数调用中,参数总是从右边推入堆栈。"谁告诉你这是一个对你撒谎的坏人,而你因为相信了他们而上当受骗。 C 不保证堆栈存在,更不用说在其上传递参数,更不用说以某种特定顺序,更不用说它们会按照它们被压入的顺序进行评估可能不存在的堆栈。
标签: c post-increment pre-increment