2015-01-01 136 views
0

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

我希望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主要():

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开始。

+0

请问你能解释一下这个void remove_unimportant_words(char word [MAX],int SIZE_ARRAY,char list [SIZE_ARRAY] [MAX],int j,int i );'? –

+0

'remove_unimportant_words'函数中的'SIZE_ARRAY'是一个完全独立的变量;修改它不会修改全局变量。 –

+0

您正在传递'SIZE_ARRAY'的副本,而不是全局的SIZE_ARRAY变量本身。将参考/指针传递给SIZE_ARRAY,或者直接从函数内部访问它。 – initramfs

回答

0

当你逝去的SIZE_ARRAY作为参数的函数remove_unimportant_words,这不是在函数中使用全球任何更多..所以全球SIZE_ARRAY保持不变。

您不应该通过SIZE_ARRAY作为参数。希望你的代码能按预期工作。

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

... 
0

只要不使用SIZE_ARRAY作为参数,函数remove_unimportant_words可以存取权限的任何

0

如果SIZE_ARRAY是一个全局变量如你所说,你不需要另一个整数参数传递给函数remove_unimportant_words()

SIZE_ARRAY你传入remove_unimportant_words()有效阴影与的本地副本不相关的,新分配的变量全局变量下也将被释放的函数返回名称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从一个函数传递到另一个函数,您也可能使用地址和指针来通过引用传递该变量。

作为一个便笺,你确定你提供的代码编译?我看到很多看起来不合法的语法...