2010-05-06 12 views
1

Disons que j'ai cette option pour créer un tableau multidimensionnel dynamiquement:C tableau dynamique multidimensionnelle de

int* *grid = new int*[gridSizeX]; 

for (int i=0; i<gridSizeX; i++) { 
    grid[i] = new int[gridSizeY]; 
} 

ne devrait pas être possible maintenant d'accéder à des éléments tels que la grille [x] [y] = 20?

+2

Oui. {En supposant que 'x' est dans [0,' gridSizeX') et 'y' dans [0,' gridSizeY').} Je vous recommande d'utiliser 'std :: vector' pour gérer la mémoire pour vous. – GManNickG

+0

permet de voir ici, dans les liens connexes, nous trouvons http://stackoverflow.com/questions/1024772/dynamic-multidimensional-array et http://stackoverflow.com/questions/799373/array-of-pointers-to-multidimensional -arrays et http://stackoverflow.com/questions/1584100/converting-multidimensional-arrays-to-pointers-in-c et il y en a d'autres: J'ai déjà répondu à au moins trois versions de ce nombre de lunes. – dmckee

+0

AraK a répondu quelque chose de similaire de manière extensive ici: http://stackoverflow.com/questions/1946830/multidimensional-variable-size-array-in-c –

Répondre

3

Oui, cela devrait fonctionner correctement.

Mais ... vous pouvez envisager d'utiliser des conteneurs standard au lieu de gérer manuellement la mémoire:

typedef std::vector<int> IntVec; 
typedef std::vector<IntVec> IntGrid; 
IntGrid grid(gridSizeX, IntVec(gridSizeY)); 

grid[0][0] = 20; 
0

Oui - mais en C/C++, il sera aménagé en grille [y] [x].

+0

Pardonnez-moi - je veux dire, il sera mis en mémoire sous forme de grille [y] [ X]. Et d'accord avec gf - en C++, vous pouvez utiliser des conteneurs standards, car alors vous pouvez vérifier leur .size() et éviter toute erreur :) – nevelis