不保留其值的静态变量

时间:2017-01-23 15:25:44

标签: c variables static minimum retain

我想编写一个函数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

虽然我已使用min关键字声明变量static,但min在调用之间不会保留其值。

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

1 个答案:

答案 0 :(得分:6)

静态变量确实在调用之间保留其值。但是,请允许我将您的注意力转移到代码中的几行:

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

进入该功能后立即执行此操作。因此,虽然min 将获得上一次传递的值,但您将在每次传递中覆盖它。