0

我有一个像这样静态声明的数组Cell SMatrix_A[36][10]。当我在代码 ( Cell foo = SMatrix_A[12][8]) 中直接使用 SMatrix_A 时,一切正常。但是,我真正想要的是声明其中几个矩阵(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;
}

You need to typedef your 2D array type (this is likely a good idea so that your SMatrix_A, SMatrix_B all have the same size). Then you can create pointers to it as normal. Note that you must dereference the pointer before you index it.

于 2012-08-26T15:47:28.797 回答