2010-11-19 33 views
1

我试图通过使用Objective C在矩阵类型窗体中打印多个数组(例如3x3)。我对该语言相当陌生并且卡住了。我可以传递单个数组,但是对于多个数组,我得到错误数组类型具有不完整的元素类型。在目标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

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

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

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

但是,value[][]是不完整的,因为它无法了解第一个[]数组下标而不知道第二个的维数。出于同样的原因,value[j][k]声明没有任何意义 - 如果不知道行的大​​小,您如何处理这些列?

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

+0

'float value **'或'float ** value'? – taskinoor 2010-11-19 16:38:11

+0

感谢您指出错误。 – 2010-11-19 16:40:33

+0

这工作!感谢Alex。 – Cam 2010-11-19 19:41:56

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; 
+0

arrayWithPjects?我猜这是一个错字。 – taskinoor 2010-11-19 16:43:48

+0

我避免NSArray的主要原因是由于应用程序需要高达40x40的矩阵(信号处理)。 – Cam 2010-11-19 17:44:53