将Objective C中的多数组传递给函数

时间:2010-11-19 16:22:54

标签: c arrays multidimensional-array

我正在尝试传递一个多数组(例如3x3),使用Objective C以矩阵类型的形式打印。 我对这门语言比较陌生而且卡住了。我可以传递单个数组,但是对于多个数组,我得到错误数组类型具有不完整的元素类型。

void printMat(float value[][], int rows, int col)
{
    int j, k;
    float printpt;

    //Handles coloum printing
    for (k=0; k<col; k++)
    {
        NSLog(@"/n");
    //Handles row printing
    for (j=0; j<rows; j++)
    {
        printpt = value[j][k];
        NSLog(@"%f ", printpt);
    }
    }
}

我正在尝试用

调用该函数
printMat(A, n, n)

其中A是浮点数A [30] [30],n = 30。 实现这一目标或通过多维数组的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

将其作为float *value传递,然后适当地计算到数组中的偏移量。 value[j*cols+k]

注意:data is held in the following order - 第一行(全部),第二行(全部)等))。

value[]并非不完整,因为它的行为为value*

但是,value[][]不完整,因为它无法在不知道第二个维度的情况下理解第一个[]数组下标。出于同样的原因,语句value[j][k]没有意义 - 如果不知道行大小,你如何解决这些列?

float value[][30]工作正常,但不会帮助您,因为您想提供可变大小。

答案 1 :(得分:1)

对于一件事情来说这不是客观的C(除了NSLog语句)....在objective-c中你只需创建这样的数组:

NSArray *row1 = [NSArray  arrayWithObjects:obj1,obj2,obj3,nil];
NSArray *row2 = [NSArray  arrayWithObjects:obj3,obj4,obj5,nil];

NSArray *matrix  = [NSArray arrayWithPjects:row1,row2,nil];

然后你的函数原型就是:

-(void) printMat:(NSArray *)matrix;