2009-10-07 8 views
27

Je n'ai trouvé aucune réponse dans aucune des questions posées. Je passe un Integer Array à une fonction.Maintenant je veux traverser le tableau.Mais comme les choses ont fonctionné en C, C++ en utilisant simplement arrayname.length qui a donné le nombre d'éléments dans le tableau. Quel est le moyen de trouver cela? [NSArrayObject length] fonctionne pour le type NSArray mais je le veux pour int []. pas même [nombre XYZ] fonctionne .... alors, vous voulez une autre façon de le découvrir.Longueur d'un tableau dans l'objectif C

Répondre

20

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

sz = (sizeof foo)/(sizeof foo[0]); 
+0

J'ai essayé ceci ... j'ai vu dis pour un tableau bidimensionnel mais mon tableau est une dimension simple ... juste comme int foo [] alors wen je fais sizeof (foo)/sizeof (foo [0]) il retourne 4/4 ie 1 ..j'ai déjà essayé ... mais pas de chance..il existe un autre moyen? Merci – Darpan

+2

@Darpan: Cela ne fonctionne que lorsque vous déclarez int foo [5], pas int foo []. – mouviciel

+0

acceptez w/mouviciel, cela ne sera pas ce que vous voulez. – pxl

5

Huh? 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 qui lui est associée au moment de l'exécution.

17

Il n'y a pas une telle chose comme array.length en C. Un int tableau dans Objective-C est exactement la même comme un tableau int en C. Si elle est définie de façon statique comme int foo[5], vous pouvez le faire sizeof(foo) pour obtenir la taille - mais seulement dans la même fonction foo est défini dans (pour d'autres fonctions, c'est juste un pointeur int, pas un tableau en soi). Sinon, il n'y a aucun moyen inhérent d'obtenir cette information. Vous devez soit faire passer la taille ou utiliser des valeurs sentinelles (comme la terminaison '\ 0' dans les chaînes C, qui sont juste des tableaux de char).

+0

Je cherche numéro c.-à-longueur éléments dans un tableau d'entiers. et pas sizeof.as wen id o sizeof il me renvoie simplement le sizeof int – Darpan

+4

Comme je l'ai dit, ne peut pas faire. 'sizeof()' fonctionne pour des tableaux de taille statiques comme l'exemple que j'ai donné plus haut dans la même fonction que celle dans laquelle ils sont définis. C'est le C le plus proche qui vient à l'appui. – Chuck

5

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

1

ressemble à un travail pour NSMutableArray. Y at-il une raison pour laquelle vous avez besoin de travailler avec un tableau C? si ce n'est pas le cas, considérez NSMutableArray. Je peux me tromper (alors s'il vous plaît corrigez-moi si je suis), mais il n'y a pas moyen facile en C pour obtenir la taille de int [] à l'exécution. vous devriez faire quelque chose comme créer une structure pour contenir votre tableau et un int où vous pouvez garder une trace du nombre d'éléments dans votre tableau vous-même.

Encore plus fantaisiste, vous pouvez faire en sorte que votre struct maintienne 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 d'objectif-c.

1

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

Ce que vous demandez de faire, ne sont pas vraiment bien soutenu dans C mais il existe une méthode sur le mac, vous pouvez essayer (malloc_size):

determine size of dynamically allocated memory in c

2

Il n'y a pas une telle chose comme arrayname.length dans 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 est la fonction principale.Vous pouvez trouver cette fonction est tous vos projets iPhone dans un fichier nommé main.m, il ressemblera à quelque chose comme 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 le argv argument passé est un v ecteur, ou tableau de chaînes, et le argc argument est un c ount du nombre d'éléments qui sont dans ce tableau.

Vous devrez faire la même chose pour tous les types primitifs, ceci est la partie C d'Objective-C. Si vous restez dans les pièces Objectif en utilisant NSArray ou les sous-classes fonctionne très bien, mais nécessite que tous les éléments soient des objets.

3

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(); 
} 
[count tableau]
+2

4 espaces avant qu'une ligne de texte indique au site d'utiliser le formatage du code. Pour mettre rapidement 4 espaces devant plusieurs lignes de code, sélectionnez toutes les lignes et cliquez sur le bouton ** {} **. Je l'ai arrangé pour vous, pour le rendre lisible. –

2

cela semble travailler le plus facile à Objective-C

28

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

+1

La question concerne le tableau C, où il n'y a pas de sélecteur de compte. – Vive

Questions connexes