2010-11-19 6 views
1

Je suis en train de passer un multi-array (par exemple 3x3) pour être imprimé dans une forme de type de matrice en utilisant Objective C. Je suis assez nouveau à la langue et je suis bloqué . Je peux passer un seul tableau, mais avec des tableaux multiples, j'obtiens l'erreur Le type de tableau a un type d'élément incomplet.Passage multi-array dans Objective C à une fonction

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); 
    } 
    } 
} 

Je suis en train d'appeler la fonction avec

printMat(A, n, n) 

Où A est le flotteur A [30] [30] et n = 30. Quel est le meilleur moyen d'y parvenir ou de passer des tableaux multidimensionnels?

Répondre

2

passez-le comme float *value, puis de calculer le décalage dans le tableau de manière appropriée. value[j*cols+k].

Note: data is held in the following order - première rangée (tous), deuxième rangée (tous) etc)).

value[] n'est pas incomplète car elle se comporte comme value*.

Toutefois, value[][] est incomplète, car il n'a aucun moyen de comprendre le premier indice de tableau [] sans connaître la dimension de la seconde. Pour la même raison, la déclaration value[j][k] n'a pas de sens - sans connaître le rowsize, comment pouvez-vous adresser les colonnes?

float value[][30] fonctionne bien, mais ne vous aidera pas parce que vous voulez fournir une taille variable.

+0

'float value **' ou 'float ** value'? – taskinoor

+0

merci de signaler le bug. –

+0

Cela a fonctionné! Merci Alex. – Cam

1

bien pour une chose que ce n'est pas objective-C (à l'exception des déclarations NSLog) .... en c objectif vous suffit de créer les tableaux comme ceci:

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

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

et vous le prototype de fonction serait simplement:

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

arrayWithPjects? Je suppose que c'est une faute de frappe. – taskinoor

+0

La principale raison pour laquelle j'ai évité NSArray était d'être une application nécessitant jusqu'à 40x40 matrices (traitement du signal). – Cam

Questions connexes