更改全局变量 C 的值



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

我希望SIZE_ARRAY更改为每次调用 remove_unimportant_words 函数时它变成的值。

变焦:

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("%dn", SIZE_ARRAY);
}

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

当你在函数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)
{
...

如果 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从一个函数传递到另一个函数,则还可以使用地址和指针通过引用传递变量。

作为旁注,您确定您提供的代码可以编译吗?我看到很多语法似乎无效...

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

相关内容

  • 没有找到相关文章

最新更新