web-dev-qa-db-fra.com

Longueur d'un tableau dans l'objectif C

Je n'ai trouvé de réponse dans aucune des questions posées. Je passe un tableau entier à une fonction, je veux maintenant parcourir le tableau, mais comme les choses fonctionnaient en C, C++ en utilisant simplement arrayname.length qui donnait le nombre d'éléments dans le tableau. Quelle est la façon de trouver cela? [NSArrayObject length] fonctionne pour le type NSArray mais je le veux pour int []. même [le compte XYZ] ne fonctionne pas ... alors je veux une autre façon de le savoir.

31
Darpan

Il n'y a rien de spécifique à Objective-C avec un tableau d'entiers. Vous utiliseriez la même technique que si vous utilisiez C.

sz = (sizeof foo) / (sizeof foo[0]);
21
Andy Gaskell

Vous pouvez utiliser [XYZ count] pour obtenir la longueur du tableau

30
user2070420

Il n'y a rien de tel que array.length En C. Un tableau int dans Objective-C est exactement le même comme un tableau int en C. S'il est défini statiquement comme int foo[5], alors vous pouvez faire sizeof(foo) pour obtenir la taille - mais seulement dans la même fonction foo est défini dans (pour les autres fonctions, c'est juste un pointeur int, pas un tableau en soi) . Sinon, il n'y a aucun moyen inhérent d'obtenir ces informations. Vous devez soit transmettre la taille, soit utiliser des valeurs sentinelles (comme le "\ 0" de fin dans les chaînes C, qui ne sont que des tableaux de caractères).

17
Chuck

Hein? En C, il n'y a pas de "arrayname.length". Un tableau d'un type primitif, tel que int[], n'a aucune information de longueur associée à l'exécution.

5
unwind

Un tableau est simplement une adresse mémoire au début d'un bloc de mémoire qui a été alloué pour le tableau. Pour l'utiliser réellement, vous devez vous souvenir de la longueur après sa création. Vous pouvez soit transmettre la longueur à chaque fonction, soit encapsuler le tableau et la longueur dans une autre structure, en faisant passer cette structure.

5
James M.

[nombre de tableaux] cela semble fonctionner le plus facilement dans objective-c

4
chillininvt

ce code peut être utilisé lorsque le nombre total d'éléments dans le tableau n'est pas connu.

main()
{
    int a[]={1,2,3,4,5,6,7}
    int i;
    clrscr();
    for (i=0;i<=((sizeof(a)/sizeof(int));i++)
    {
        puts(a[i]);
    }
    getch();
}

Il n'y a rien de tel que arrayname.length en C. C'est pourquoi tant de fonctions prennent des paires d'arguments, un argument avec le tableau et un argument avec la longueur du tableau. Le cas le plus évident pour cela est la fonction principale. Vous pouvez trouver cette fonction est tous vos projets iPhone dans un fichier nommé main.m, cela ressemblera à ceci:

int main(int argc, char *argv[]) {    
  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  int retVal = UIApplicationMain(argc, argv, nil, nil);
  [pool release];
  return retVal;
}

Remarquez comment l'argument argv est un v ecteur, ou un tableau de chaînes, et l'argument argc est un c nombre de combien les éléments qui sont dans ce tableau.

Vous devrez faire la même chose pour tous les types primitifs, c'est la partie [~ # ~] c [~ # ~] d'Objective-C . Si vous restez dans les parties Objective utilisant NSArray ou des sous-classes, cela fonctionne très bien, mais nécessite que tous les éléments soient des objets.

2
PeyloW

Si vous voulez un tableau d'entiers, enveloppez-les dans des objets NSNumber et placez-les dans un NSArray.

Ce que vous demandez à faire n'est pas vraiment bien supporté en C bien qu'il existe une méthode sur le mac que vous pouvez essayer (malloc_size):

déterminer la taille de la mémoire allouée dynamiquement en c

ressemble à un travail pour NSMutableArray. y a-t-il une raison pour laquelle vous devez travailler avec un tableau C? sinon, considérez NSMutableArray.

je peux me tromper (alors corrigez-moi si je le suis), mais il n'y a pas de moyen facile en C pour obtenir la taille de int [] au moment de l'exécution. vous devez faire quelque chose comme créer une structure pour contenir votre tableau et un int où vous pouvez suivre le nombre d'éléments dans votre tableau vous-même.

même plus sophistiqué, vous pouvez faire en sorte que votre structure contienne votre tableau et un bloc. alors vous pouvez concevoir le bloc pour faire le suivi pour vous.

mais c'est plus une question C, pas une question objectif-c.

1
pxl

Vous devriez essayer l'approche suivante:

float ptArray[] = {97.8, 92.3, 89.4, 85.7, 81.0, 73.4, 53.0, 42.3, 29.4, 14.1};

int x = sizeof(ptArray)/sizeof(ptArray[0]);

 NSLog(@"array count = %d", x);

Sortie:

array count = 10
0
RichApple