当前位置:  开发笔记 > 编程语言 > 正文

不保留其值的静态变量

如何解决《不保留其值的静态变量》经验,为你挑选了1个好方法。

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

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

但我得到以下输出:

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> David Hoelze..:

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

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

您在进入该功能后立即执行此操作.所以,虽然min 会有最后一次传球的值,但你会在每次传球时都覆盖它.


`min = cur_min;`不是*初始化*变量.初始化是在第一次声明变量时完成的,或者隐式地为零(`static int min;`)或者显式地(`static int min = 3;`).写`min = cur_min;`只是将变量设置为cur_min的值,而不是初始化它.不是100%肯定,但写`static int min = va_arg(lst,int);`应该做的伎俩.
你所指的不是初始化.您只需设置其当前值.初始化设置其初始值.
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有