我有一个非常简单的问题。
在这段代码中n的值何时递减?
#include<stdio.h>
void func(int n)
{
//text//
}
int main()
{
int n=10;
func(n--);
return 0;
}
现在当调用func()时,当控制返回到main()时,n的值会递减,或者仅在那时递减,但n = 10会传递给func()。 请解释一下,如果有办法检查价值,那将非常有帮助。
答案 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