2010-11-19 68 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