J'ai le code suivant qui fonctionne bien ... qui appelle cette fonction: p> 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 {
5 Réponses :
Pourquoi n'utilisez-vous pas simplement Cela entraînerait P> nsarray code> ou
nsmutablearray code> avec
nsinteger code> S? Ces classes de réseau sont de longueur variable et beaucoup plus facile à utiliser.
- (void)testCall: (NSArray *) arr {
NSLog(@"cell value is %u", [[arr objectAtIndex:1] objectAtIndex:1]);
}
L'OP aurait besoin d'utiliser (int **) code> 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.
Vous ne pouvez pas utiliser int [] [] [] code> 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] code>, sinon vous devrez utiliser
int ** code> qui peut être accessible comme un tableau. < / p>
Les tableaux
C ne peuvent pas être variables dans plus d'une dimension.
Vous ne pouvez pas avoir ceci: p> 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
}
J'écrirais cela comme suit:
[foo testCall: myArray];
N'oubliez pas de gratuit () code> la mémoire après appelant
[foo testcall: myarray]; code>.
appelez fonction p>