如何在函数内重置静态变量

Sue*_*Sue 7 c static initialization reset

有没有办法重置函数中声明为static的变量?目标是确保不使用来自不相关调用的延迟值调用该函数.例如,我在矩阵的列上有一个函数opearting.

int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows 
   if (column != whichColumn){
    memset(v,0,size);
    whichColumn = which;
   } 
   //do other things
}
Run Code Online (Sandbox Code Playgroud)

该函数被调用n次,每列一次.这是"重新设置"静态变量的正确方法吗?是否有其他一般的万无一失的重置静态变量的方法?例如,我想确保如果使用可能具有不同维度的新矩阵进行调用,则向量v被调整大小并归零等.似乎最简单的方法是使用NULL指针调用该函数:

int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows 
   if (A == NULL){
    FREE(v);
    whichColumn = 0;
   } 
   //do other things
}
Run Code Online (Sandbox Code Playgroud)

Jes*_*ins 0

我建议将其转换为结构并编写一个小辅助函数来管理您想要执行的操作的语义。如果请求适合其大小,它可以返回缓冲区,或者在必要时按需创建一个新缓冲区(并释放旧缓冲区)。