Postfix减量

时间:2011-10-03 07:43:25

标签: c

我有一个非常简单的问题。

在这段代码中n的值何时递减?

#include<stdio.h>
void func(int n)
{ 
  //text//
}

int main()
{
  int n=10;
  func(n--);
  return 0;
}

现在当调用func()时,当控制返回到main()时,n的值会递减,或者仅在那时递减,但n = 10会传递给func()。 请解释一下,如果有办法检查价值,那将非常有帮助。

3 个答案:

答案 0 :(得分:6)

当一个函数被调用时,它的所有参数都在函数可以开始之前被评估(以实现定义的顺序) - 它是一个序列点。因此,之后评估所有参数,函数最终可以开始。

这意味着n--被评估并产生函数的值10。目前函数已开始n已经为9,但函数的n参数保留值10

检查这个的简单方法:

void func(int n, int *np)
{
    printf("Outside: %d\n", *np);
}

int main(void)
{
    /* ... */
    func(n--, &n);
}

答案 1 :(得分:2)

减少将在调用func之前发生,但func将传递旧值的副本。

考虑对您的程序进行以下修改,说明这一点:

#include <stdio.h>

static int n;

void func(int m)
{
  printf("%d,%d\n", n, m);
}

int main()
{
  n = 10;
  func(n--);
  return 0;
}

打印:

  

9,10

答案 2 :(得分:0)

我认为这个代码可以更好地表达您的问题:

#include <stdio.h>

static int global_n;

void func(int n)
{
    printf("n = %d, global_n = %d\n",
            n, global_n);
}

int main()
{
   global_n = 10;
   func(global_n--);
   return 0;
}

这表明函数传递旧值,但减量发生在调用之前。

n = 10, global_n = 9