3

C++で配列をいじっています。matrix という 2 次元配列を定義し、負の値を抽出して array という配列に代入します。

すべての要素を列挙するのではなく、配列をすばやくゼロに初期化する方法はありますか? 次のような他の投稿や行に目を通しました: int array[10] = {}or int array[10] = {0}do not work on my compiler. error: variable-sized object ‘array’ may not be initializedこれらのステートメントを使用しようとすると 、エラー メッセージが表示されます。

私の教科書では、すべての配列は宣言時にゼロに初期化されると書かれていましたが、コンパイラでこれをテストしたところ、そうではありませんでした。for ループを使用して強制的にゼロにする必要がありました。これを行う正しい方法はありますか?

ところで、私は Mac を持っていて、コンパイルに g++ を使用しています。私が行うman g++と、llvm-gcc コンパイラへのシンボリック リンクと表示されます。

#include<iostream>

const int NROWS = 4, NCOLS = 5;
int matrix[][NCOLS] = {    16,  22,  99,  4, 18, 
                         -258,   4, 101,  5, 98, 
                          105,   6,  15,  2, 45, 
                           33,  88,  72, 16, 3};

int main()
{
    int SIZE = 10;
    int array[SIZE];
    int count=0;

    // Values of array before initalized    
    for(int i = 0; i < SIZE; i++)
    {
        std::cout << array[i] << " ";
    }    
    std::cout << std::endl;

    //Initialize array to zero
    for(int i = 0; i < SIZE; i++)
    {
        array[i]=0;
        std::cout << array[i] << " ";
    }    
    std::cout << std::endl;

    // Extract negative numbers and assign to array
    for(int i = 0; i < NROWS; i++)
    {
        for(int j = 0; j < NCOLS; j++)
        {
            printf("matrix[%i,%i]=%5i\n",i,j,matrix[i][j]);

            if(matrix[i][j] < 0)
            {
                array[count] = matrix[i][j];
                printf("\tarray[%d]= %4d",count, matrix[i][j]);
                printf("\tcount=%d\n", count);
                count++;                
            }
        }

    }

    // Values of array
    for(int i = 0; i < SIZE; i++)
    {
        std::cout << array[i] << " ";
    }

    std::cout << std::endl;

    return 0;
}
4

5 に答える 5

3

またはに変更int SIZE = 10;すると、ベースの初期化が機能するはずです。const int SIZE=10;enum{SIZE=10};{}

可変サイズの配列を許可する gcc 拡張機能を誤って使用しました。

于 2013-11-08T21:27:53.643 に答える
1

これは機能し、残りの 9 つの要素をゼロで初期化します。

int array[10] = {0};

参照: C++ での配列の初期化

于 2013-11-08T21:29:30.383 に答える
0

配列サイズが変数に依存する場合は、次のことを行う必要があります: ループスルーまたは

int配列[x];

memset(配列、0、x);

配列サイズがハードコーディングされている場合、次のことができます。

int 配列[10] = {0};

于 2013-11-08T21:28:17.323 に答える