4

C 言語で、配列を自動的に拡張する方法はありますか。例えば:

int arr [100] [10];

配列がいっぱいの場合、「自動的に」大きくすることは可能ですか? それとも、C++ を使用している場合にのみ可能ですか? これをCで書くとどうなりますか?

4

2 に答える 2

2

C にはそのような機能はありません。ポインターを使用して配列を宣言し、「配列がいっぱい」の状態を手動で検出し、 を呼び出しmallocて、拡張配列にコピーしfree、元の配列にコピーする必要があります。可変長配列でさえ、配列の存続期間中にサイズを 1 回しか設定できないため、機能しません。

std::vector<std::vector<int> >C++ では、プレーンな配列の代わりに使用できます。「配列がいっぱいです」状態を検出する必要がありますが、std::vector<T>コンテナはサイズ変更時にすべての再割り当てと拡張を処理します。

于 2012-11-09T18:16:08.227 に答える
1

C で配列を「自動的に」拡張することはできません。配列を静的に宣言する場合:

int arr[10];

あなたが示したように、あなたは多くの記憶場所を持っています。実行時に変更できるようにしたい場合は、を使用して動的に宣言し、を使用malloc()して大きくする必要がありますrealloc()

あなたのための簡単な例:

int main(void){
    int input, count = 0, length = 2;
    int * arr = malloc(sizeof(int) * length); // array of size 2

    while((input = getchar()) != 'q') //get input from the user
    {
        getchar();                    //get rid of newlines
        arr[count] = input;           
        if(count + 1 == length){      // if our array is running out of space
            arr = realloc(arr, length * length);  // make it twice as big as it was
            length *= length;
        }
        count++;
    }

    for(length = 0; length < count; length++)  // print the contents
        printf("%d\n", arr[length]);

    free(arr);

    return 0;
}
于 2012-11-09T18:18:06.083 に答える