2015-01-01 204 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從一個函數傳遞到另一個函數,您也可能使用地址和指針來通過引用傳遞該變量。

作爲一個便箋,你確定你提供的代碼編譯?我看到很多看起來不合法的語法...