0

私は次のコードを書きました:

#include<stdio.h>
#include<stdlib.h>
#define FOR(i,a,b) for(i=a;i<b;i++)

void DeclareAndInitArray();
void PrintArray();

int main(){
    DeclareAndInitArray();
    //printf("hello\n");
    PrintArray();
    return 0;
}

void DeclareAndInitArray(){
    int array[100];
    int i;
    FOR(i,0,100){
        array[i]=i;
    }
}

void PrintArray(){
    int array[100];
    int i;
    FOR(i,0,100){
        printf("%d\t",array[i]);
    }
}

出力は0から始まり、99まで続くと思いますが、私が得ているのは次のとおりです。

ここに画像の説明を入力してください

誰かが最初にこれらの2つの値は何であり、なぜそれらが来るのか教えてもらえますか?

4

3 に答える 3

1

DeclareAndInitArray()それぞれPrintArray()が独自の個別のアレイを使用しています。各関数で個別に宣言しています。

int array[100];

そのため、使用している配列はPrintArray()初期化されておらず、ガベージが含まれています。

配列を一度宣言してから、それをPrintArray()パラメーターとして渡す必要があります。代わりにこれを試してください:

int main(){
    int array[100];
    DeclareAndInitArray(array);
    //printf("hello\n");
    PrintArray(array);
    return 0;
}

void InitArray(int array[]){
    int i;
    FOR(i,0,100){
        array[i]=i;
    }
}

void PrintArray(int array[]){
    int i;
    FOR(i,0,100){
        printf("%d\t",array[i]);
    }
}
于 2012-10-19T10:14:34.947 に答える
0

呼び出し元の2つの関数にはmain()、という名前の配列の独自のコピーがありarrayます。

結果として、関数によって行われた初期化DeclareAndInitArray()は他の関数には表示されません。

これを修正するには、次のことができます。

1)配列の宣言をグローバルにして、両方の関数が同じ配列にアクセスできるようにします。

2)配列を宣言し、main()それを2つの関数に渡します。

于 2012-10-19T10:15:36.807 に答える