0

このような静的に宣言された配列がありますCell SMatrix_A[36][10]。コードで SMatrix_A を直接使用すると ( Cell foo = SMatrix_A[12][8])、すべて正常に動作します。しかし、私が本当に望んでいるのは、これらの行列 (SMatrix_A、SMatrix_B など) のいくつかを宣言し、実行時にそれらの間でポインター変数を切り替えることです。

私は次のようなコードを想像しています (SMatric_A、B、C が既に宣言されており、これがすべて同じファイル スコープにあると仮定します):

Cell *curMatrix = SMatrix_B;
Cell foo,bar;
...
foo = curMatrix[13][2];

コンパイラは、Incompatable pointer types assigning 'Cell*' from 'Cell[36][10]'curMatrix への最初の代入について次のように答えます。添え字なしで配列変数を参照すると、値が配列の最初の場所であるポインター型が得られると思いました。

キャストか何かが足りないだけですか?

4

1 に答える 1

3

以前の回答は完全に間違っていたので、もう一度試してみます。

#import <Foundation/Foundation.h>

typedef int matrix_t[3][3];

matrix_t matrix = { { 1, 2, 3}, { 4, 5, 6}, { 7, 8, 9} };

int main(int argc, char *argv[])
{
    matrix_t *matrixPtr = &matrix;

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            NSLog(@"%i", (*matrixPtr)[i][j]);
        }
    }
    return 0;
}

2D 配列型を typedef する必要があります (これは、SMatrix_A、SMatrix_B がすべて同じサイズになるようにするための良い考えです)。その後、通常どおりポインタを作成できます。インデックスを作成する前に、ポインターを逆参照する必要があることに注意してください。

于 2012-08-26T15:47:28.797 に答える