7
votes

Passer un ensemble INT de longueur variable en tant que paramètre de fonction dans l'objectif c

J'ai le code suivant qui fonctionne bien ... xxx pré>

qui appelle cette fonction: p> xxx pré>

J'ai besoin du tableau Be de longueur variable - Quelle est la meilleure façon de déclarer la fonction? p>

Utiliser des blancs ne fonctionne pas: P>

- (void)testCall: (int[][]) arr { 


0 commentaires

5 Réponses :


1
votes

Pourquoi n'utilisez-vous pas simplement nsarray code> ou nsmutablearray code> avec nsinteger code> S? Ces classes de réseau sont de longueur variable et beaucoup plus facile à utiliser.

Cela entraînerait P>

- (void)testCall: (NSArray *) arr {
    NSLog(@"cell value is %u", [[arr objectAtIndex:1] objectAtIndex:1]);
}


3 commentaires

L'OP aurait besoin d'utiliser (int **) pour obtenir un tableau de deux dimensions.


Vous ne pouvez pas mettre Nsintegers dans un Nsinteger depuis que Nsinteger n'est pas un objet, c'est juste un typlef d'int. Vous devrez utiliser Nsnumber, qui introduirait des frais généraux.


Chris, (int **) désigne un pointeur sur un pointeur vers un Int, pas un pointeur à un tableau à deux dimensions. L'ajout d'une indirection n'a rien à voir avec la disposition de la mémoire que vous référencez.



2
votes

Vous ne pouvez pas utiliser int [] [] [] car la taille de la deuxième dimension affecte la manière dont la matrice est aménagée en mémoire. Si vous connaissez la deuxième dimension, vous pouvez utiliser int [] [x] , sinon vous devrez utiliser int ** qui peut être accessible comme un tableau. < / p>


0 commentaires

3
votes

Les tableaux

C ne peuvent pas être variables dans plus d'une dimension.

Vous ne pouvez pas avoir ceci: p> xxx pré>

mais vous pouvez avoir ceci: p >

int testarr[][3] = {
  {1,1,1},
  {1,0,1},
  {1,1,1},
  {4,5,6},
  {7,8,9}
}

foo(testarr);

void foo(int param[][3])
{
    printf("%d", param[3][1]); // prints 5
}


0 commentaires

6
votes

J'écrirais cela comme suit:

[foo testCall: myArray];


1 commentaires

N'oubliez pas de gratuit () la mémoire après appelant [foo testcall: myarray]; .



0
votes

appelez xxx

fonction xxx


0 commentaires