更改全局变量的值,C

时间:2015-01-01 20:57:53

标签: c global-variables

所以我试图找到一种更新变量的方法,我试图让它变得全局,所以我可以轻松地改变它。唯一的问题是它不工作,我不知道如何解决它。

我想让SIZE_ARRAY更改为每次调用remove_unimportant_words函数时的值。

Decleration:

int SIZE_ARRAY = 480; 
char list[SIZE_ARRAY][MAX];
void remove_unimportant_words(char word[MAX],  int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i);

int main():

while (fscanf(file, "%s", word) != EOF){
      remove_unimportant_words(word, SIZE_ARRAY, list,  j,  i);
      }

功能:

void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i)
{

    for (i=0; i<SIZE_ARRAY; i++) {
        if(strcmp(list[i],word) == 0){
            for (j=i; j<SIZE_ARRAY; j++) {
                strcpy(list[j], list[j+1]);
            }
            SIZE_ARRAY--;
            i--;
        }

    }
    printf("%d\n", SIZE_ARRAY);
}

我基本上尝试打印SIZE_ARRAY的值,并且在进入函数时总是从480开始。

3 个答案:

答案 0 :(得分:1)

当你在函数remove_unimportant_words中传递 SIZE_ARRAY 作为参数时,这不再在该函数中用作全局..所以全局 SIZE_ARRAY 仍然存在相同。

您不应将 SIZE_ARRAY 作为参数传递。希望您的代码能够按预期工作。

void remove_unimportant_words(char word[MAX],  char list[SIZE_ARRAY][MAX] , int j, int i)
{

...

答案 1 :(得分:1)

如果SIZE_ARRAY是您所说的全局变量,则无需将另一个整数参数传递给函数remove_unimportant_words()

您传递给remove_unimportant_words()的SIZE_ARRAY有效地使用名为SIZE_ARRAY无关,新分配的变量的本地副本来影响全局变量在函数返回时释放。

本质上:

void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i);

int SIZE_ARRAY参数与实际的全局SIZE_ARRAY变量没有关系,应该被删除,以便函数体内的代码直接引用全局SIZE_ARRAY变量。

如果您只想将SIZE_ARRAY从一个函数传递到另一个函数,您也可以使用地址和指针通过引用传递变量。

作为附注,您确定您提供的代码是否已编译?我看到很多语法似乎没有效果......

答案 2 :(得分:0)

只是不要使用SIZE_ARRAY作为参数,函数remove_unimportant_words可以像往常一样访问它