gpt4 book ai didi

c - 不保留其值的静态变量

转载 作者:行者123 更新时间:2023-12-04 10:08:19 24 4
gpt4 key购买 nike

我想编写一个函数 minimum 以返回在两次调用之间发送给它的最小值。该函数可以接收任意数量的参数,所有参数都是 0 到 100 范围内的整数。发送到函数的参数列表的末尾用 -1 表示。

例如,如果我在 main 中输入以下调用:

minimum (90,78,5,20,-1);
minimum (70,40,2,-1);
minimum(40,30,-1);

第一次调用将返回 5,因为 90,78,5,20 的最小值是 5。第二次调用将返回 2,因为 5,70,40,2 的最小值是 2第三次调用将返回 2,因为 2,40,30 的最小值为 2。

因此函数 minimum 返回到目前为止发生的所有调用中发送给它的最小数字。

所以我创建了一个名为 min 的静态变量来保留函数调用之间的最小值。

这是我得到的:

#include <stdio.h>
#include <stdarg.h>

int minimum(int cnt, ...)
{
static int min;
int cur_min,i;
va_list lst;

va_start(lst,cnt);
cur_min = va_arg(lst,int);
min = cur_min;

printf("min is %d and cur min is %d \n", min, cur_min);
for(i=0; i<cnt; i++)
{
if(cur_min != -1)
{
if(cur_min < min)
{
min = cur_min;
}
cur_min = va_arg(lst,int);
printf("min is %d and cur min is %d \n" , min, cur_min);
}
else
break;

}

va_end(lst);

return min;

}





int main()
{





printf("In Call One: min is %d \n",minimum(90,78,5,20,-1));
printf("In Call Two: min is %d \n", minimum(70,40,2,-1) );
printf("In Call Three: min is %d \n", minimum(40,30,-1) );


return 0;
}

但我得到以下输出:

In Call Two: min is 2 
In Call Three: min is 30

虽然输出应该是:

In Call Two: min is 2
In Call Three: min is 2

虽然我已经使用 static 关键字声明了变量 min,但 min 并没有在两次调用之间保留它的值。

为什么以及如何让 min 在函数调用之间保留其值?

最佳答案

静态变量确实会在调用之间保留它们的值。但是,请允许我将您的注意力引向代码中的几行:

cur_min = va_arg(lst,int);
min = cur_min;

您在进入函数后立即执行此操作。因此,虽然 min 具有上次传递的值,但您在每次 传递中都覆盖了它。

关于c - 不保留其值的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41809811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com