2016-04-12 22 views
-5

誰かがC関数のグローバル変数(私の例では配列 'used')をユーザー関数内でどのように伝えることができますか(私の例では 'checkData'ですか?それは同様のコードが動作するC++(私は使用「=新しいブール[サイズ]を使用;」「ブール[サイズ]使用;」の代わりに)あなたは使用が配列であることだと思いますなぜC - ユーザー関数内のグローバル変数にアクセスできない

#include <stdio.h> 
#define true 1 
#define false 0 

typedef int bool; 
bool *used; 
int i; 

void checkData(int i); 

int main() 
{ 
    int size = 10; 

    bool used[size]; 
    for (i = 0; i < size; i++) 
     used[i] = false; 

    for (i = 0; i < size; i++) 
     checkData(i); 

    return 0; 
} 

void checkData(int i) { 
    printf("%d - %d\n", i, used[i]); 
} 
+1

'checkData'関数はすでにグローバル変数' used'にアクセスしています。 'main'関数が同じグローバル変数にアクセスしていないため、期待した値が得られません。 'main'は* local *変数' bool used [size];を宣言し、代わりにそれを設定します。 – kaylum

+0

'malloc' ... – user3386109

+1

または' void checkData(int i、int used []、size_t len) 'を使って' main() 'にローカルを保持し、そのサイズと関数を渡します。 – WhozCraig

答えて

0

を? 10人のメンバーのためのint型の配列のための 構文は、たとえば次のとおりです。

int used[10]; 

注:関数の中で、あなたは

0

bool used[size];

main()内のローカル変数で使用int型のポインタではない配列にアクセスCHECKDATAこれはグローバルスコープでused変数名を隠すので、main関数はbool* usedを参照しません。あなたがメインで使用されたときには、グローバル変数bool* usedにアクセスしていません。 checkData()関数は、main()で作成したものと同じではないグローバル変数にアクセスします。

+0

main()で設定されたcheckData()変数([]使用)にどのようにアクセスできますか? (しかし、main()の引数としてused []を渡さない) – Alexandr

+0

これはC言語ではなく、C++である! – Olaf

+0

@Alexandr:「ローカル」変数は「グローバル」変数と呼ばれていないのが良い理由があります。 – Olaf

0

変数usedは重複した名前です。 mainでは、ローカルusedにアクセスします。しかしcheckDataでは、グローバルインスタンスが使用されますが、NULLポインタを逆参照しているため、エラーが発生します(静的変数は0に初期化されます)。

関連する問題