2012-12-07 4 views
1

Nous avons le code:tableau multidimensionnel C de

int arr[3][4]; 

So arr est:

  1. Un tableau de 3 éléments, et chaque élément est un tableau de 4 int.

  2. Un tableau de 4 éléments, et chaque élément est un tableau de 3 int.

lequel est exact et pourquoi? Comment ça marche avec un tableau de plus grande dimension? Je suppose que ceci concerne la précédence et l'associativité des opérateurs.

+4

Peut-être que ce que vous demandez est à propos de [ordre de rangée-majeur] (http://en.wikipedia.org/wiki/Row-major_order) vs ordre de colonne-majeur? –

Répondre

1

Votre première interprétation est correcte.

Ces déclarations sont mieux analysées en utilisant la Droite Gauche règle, que vous pouvez lire here et here

8.3.4 $ du C++ projet de norme: ...

Exemple: considérer int x [3] [5]; Ici x est un tableau de 3 × 5 d'entiers.

...

Note: Il résulte de tout cela que les tableaux en C++ sont stockés rangée sage (dernier indice le plus rapide varie) et que la première dans la déclaration indice aide déterminez la quantité de stockage consommée par un tableau mais ne joue aucun autre rôle dans les calculs d'indice. -end note]

Remarque C++ n'a pas d'opérateur [] []. Il a seulement l'opérateur []

0

Je trouve plus facile de penser aux «rangées» et aux «colonnes» dans un tableau multidimensionnel plutôt que d'essayer de me faire des «tableaux de tableaux». Cela a la propriété pratique que I décider quel index est les lignes et quelles sont les colonnes. En d'autres termes, je peux penser à int arr[3][4]; comme un tableau 2D soit avec 3 lignes et 4 colonnes ou avec 4 lignes et 3 colonnes. Tant que mon code est compatible avec ma vision mentale du tableau, tout ira bien. Cependant, si à mi-chemin d'un programme je change de vue, les choses vont commencer à casser. Cela dit, je préfère généralement considérer cet exemple comme 3 lignes et 4 colonnes, car cela est similaire à la notation mathématique en algèbre linéaire où les lignes sont listées en premier.

+3

Il est important de s'en tenir au comportement d'accès row-major si vous souhaitez obtenir de bonnes performances de cache. – Pubby

+0

@Pubby Bon point! Je pense que ce sont des informations qui sortent du cadre de cette question particulière et qui apparaîtraient certainement dans une discussion plus approfondie sur les tableaux C++. –