2009-03-09 7 views
1
int matrix[3][3] = { 
     {1,2,3}, 
     {1,2,3}, 
     {1,2,3}, 
} 

Comment puis-je faire une boucle sur elle?pour la boucle dans le tableau primitif objectif-c -

Fondamentalement, l'opération de longueur est ma préoccupation.

for (int i=0; XXXXX; i++) { 
    for (int j=0; XXXX; j++) { 
     int value = matrix[i][j]; 
} 
} 

EDIT: Y at-il un moyen dynamique d'obtenir la taille du tableau? Quelque chose comme sizeof()?

Répondre

1

Vous pouvez le faire tout comme vous le feriez dans C:

int matrix[3][3] = { {1,2,3}, {1,2,3}, {1,2,3}, }; 

for(int i = 0; i < 3; i++) 
{ 
    for(int j = 0; j < 3; j++) 
    { 
     int value = matrix[i][j]; 
    } 
} 

Bien que, je recommande d'utiliser une place constante de la magie 3 de. Cela rendra tout plus lisible, en particulier la boucle for.

+0

oui son travail si vous définissez la condition X <3 mais il n 'une approche dynamique? un sizeof ou quelque chose? –

+1

Utilisez-vous Objective-C pour Cocoa? Si c'est le cas, vous pouvez utiliser un NSArray ou NSMutableArray, puis vous pouvez utiliser myArray.Count. http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSArray_Class/Reference/Reference.html – Sean

+0

Le problème avec le codage dur 3 dans la boucle, c'est quand quelqu'un ajoute un autre élément à la matrice, le sizeof() les conventions sont utilisées pour ne pas avoir à réécrire toutes les tailles codées, quand cela arrive. – sfossen

-3

La longueur du tableau de niveau supérieur est 3, la longueur de chaque sous-réseau est 3, donc cela devrait fonctionner:

for(int i = 0; i < 3; ++i) { 
     for(int j = 0; j < 3; ++j) { 
      // do something here for each element 
     } 
} 
+0

++ i => i ++ ++ j => j ++ – buley

+2

@éducteur: absolument pas nécessaire, c'est encore mieux avec pré-incrément. – moala

6

Pour les types de tableau statique créés, vous pouvez utiliser l'opérateur sizeof, par exemple

sizeof(myArray)/sizeof(myArray[0]) 

Pour les tableaux créés dynamiquement (i.e. referened par pointeur), cela ne fonctionnera pas (sizeof va vous donner la taille d'un pointeur sur votre système). Dans ce cas, vous avez besoin de deux constantes ou d'une valeur sentinelle dans votre tableau. Avec une Sentinal, il suffit de balayer chaque axe jusqu'à ce que vous le trouviez pour la longueur (c'est ainsi que fonctionnent les chaînes C, en utilisant \ 0).

5

En C je fais ce qui suit, essayez:

sizeof(matrix) /sizeof(matrix[0])   <- outer array 
sizeof(matrix[0])/ sizeof(matrix[0][0]) <- inner array 



linux ~ $ cat sizeof_test.c 
#include <stdio.h> 

int main(void) 
{ 
     int matrix[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, }; 
     int matrix2[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, {1,2,3}, }; 
     int matrix3[][4] = { {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, }; 

     printf("array (%d) - elements(%d)\n", sizeof(matrix) /sizeof(matrix[0]), sizeof(matrix[0])/ sizeof(matrix[0][0])); 
     printf("array (%d) - elements(%d)\n", sizeof(matrix2) /sizeof(matrix2[0]), sizeof(matrix2[0])/ sizeof(matrix2[0][0])); 
     printf("array (%d) - elements(%d)\n", sizeof(matrix3) /sizeof(matrix3[0]), sizeof(matrix3[0])/ sizeof(matrix3[0][0])); 

     return 0; 
} 
linux ~ $ gcc sizeof_test.c -o sizeof_test 
linux ~ $ ./sizeof_test 
array (3) - elements(3) 
array (4) - elements(3) 
array (4) - elements(4) 
linux ~ $ 
Questions connexes