2012-09-10 6 views

Répondre

2

En mémoire, ils sont représentés exactement les mêmes. La différence est sémantique. Si vous travaillez sur une matrice, accesing un élément comme

x[i][j] 

est plus intuitif que

x[i*n + j] 
+0

N'y aura-t-il pas de surcharge pour un tableau à deux dimensions lors de l'exécution ou de l'accès à ses éléments? – user1660982

+0

@ user1660982 Je doute fortement que. Ecrivez d'abord votre code pour plus de lisibilité, et ne vous inquiétez des performances qu'après avoir mesuré. –

+0

Il y a absolument un surcoût pour accéder au tableau en tant que tableau 2D. Si vous allouez le tableau 2D sous la forme d'un tableau de tableaux, vous risquez de rencontrer des problèmes de performances pour des tableaux suffisamment grands. –

1

Les deux tableaux 1D et 2D sont exactement les mêmes dans la perspective de la mémoire. La seule différence serait syntaxiquement. Les tableaux 3D ne seraient utiles que pour concevoir la logique autour du problème.

par exemple:

array x[m*n] 
array x[m][n] 

sont les deux mêmes lorsque nous parlons en termes de mémoire

0

Vous pouvez créer le tableau 2D d'int et un pointeur vers int.

Ensuite, vous pouvez définir le pointeur à l'adresse du premier élément

int* singleDimention=&twoDimension[0][0]; 

Si vous traitez tous les éléments quels que soient leurs coordonnées 2D, il sera plus rapide (un peu) de le faire en utilisant une matrice de dimension.

numItems=n*m; 
for(i=0;i<numItems;i++){ 
    do stuff with singleDimention[i]; 
} 
Questions connexes