0

c で行列の一部だけを変更するにはどうすればよいですか (私は実際には Objective-C を使用していますが、c で行列を使用しています)。例えば:

NSInteger tempMapMatrix[100][100] =
   {{0,0,1,1,2,2,1,1,0,2,4,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {0,1,1,2,3,2,1,1,4,4,3,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {1,1,2,3,3,2,1,4,1,3,3,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {1,1,3,3,3,2,4,1,1,1,4,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {0,1,1,2,2,2,4,4,4,4,4,4,4,0,0,1,1,1,1,0,0,0,4,4,0},
    {0,0,1,1,2,2,1,0,0,2,3,4,4,0,0,0,0,0,0,0,0,0,4,4,0},
    {4,4,1,1,2,2,1,1,0,1,1,0,4,0,0,0,0,0,0,0,0,0,4,4,4},
    {0,4,1,2,2,2,1,1,0,4,4,4,4,4,4,4,0,0,0,0,1,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,0,3,3,3,3,3,3,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,4,3,2,2,2,2,2,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,4,3,2,3,3,3,2,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,4,3,2,3,2,2,2,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,3,3,2,3,2,3,3,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,4,4,1,2,2,3,2,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,4,3,3,3,3,3,0,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,4,4,0,0,0,0,0,0,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,0,1,0,0,0,0,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,0,1,0,0,0,1,1,1,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,1,0,0,0,0,0,1,1,0,0},
    {0,0,1,2,2,2,1,0,0,0,4,4,4,0,0,1,1,0,0,0,0,0,1,0,0}};

次に、整数の最初のカップル (x と y) を変更します。

tempMapMatrix[100][100] =
   {{5,5,5,5,5,1,2,3},
    {5,5,5,5,5,1,2,3},
    {5,5,1,1,1,1,2,3},
    {5,5,1,5,5,1,2,3},
    {5,5,1,1,1,1,2,3},
    {5,5,5,5,5,5,5,5},
    {5,5,5,5,5,1,2,3},
    {5,2,2,2,5,1,2,3},
    {5,2,5,2,5,1,2,3},
    {5,2,2,2,5,1,2,3}};

しかし、エラーが発生します (Expected Expression)。私はもう試した

tempMapArray = stuff;
tempMapArray[][] = stuff;

しかし、どれも機能しません。

マトリックスの最初の数個の int を変更する方法はありますか?

4

2 に答える 2

1

それらを反復処理する必要があります。これはCです。必要な配列の断片を割り当てるための、構文上の糖衣はありません。たとえば、各行の最初の要素をすべて変更する場合は、次のようにすることができます。

for (int = 0; i < 100; ++i) {
 tempMatrix[i][0] = 5;
}

したがって、すべての行の最初のカップルについては、

for (int = 0; i < 100; ++i) {
 tempMatrix[i][0] = 5;
 tempMatrix[i][1] = 5;
}

等々。

于 2012-12-03T00:52:05.240 に答える
0

マトリックス内の各要素に個別にアクセスして変更する必要があります。

すなわち:

tempMapMatrix[0][0] = 5;
tempMapMatrix[0][1] = //...

C では、配列 (1 次元または n 次元) の内容を「一括変更」する方法はありません。

この効果を実現する最も簡単な方法は、for ループを記述して 2 次元配列の内容を反復処理し、必要な値を必要な場所に挿入することです。

于 2012-12-03T00:54:27.700 に答える