Bonjour,
Je comprends pas trop les syntax:
Quelqu'un pourait m'expliquer?Code:
1
2
3
4
5 int (*p1)[5]; // Qu'est ce que ça veut dire? int (*p2)[3][5]; p1 = new int[2][5]; p2 = new int[10][3][5];
Merci beaucoup.
Version imprimable
Bonjour,
Je comprends pas trop les syntax:
Quelqu'un pourait m'expliquer?Code:
1
2
3
4
5 int (*p1)[5]; // Qu'est ce que ça veut dire? int (*p2)[3][5]; p1 = new int[2][5]; p2 = new int[10][3][5];
Merci beaucoup.
déclare p1 comme un pointeur sur un tableau de 5 intCode:int (*p1)[5]
déclare p2 comme un pointeur sur un tableau à deux dimensions de 3*5 int (soit l'espace mémoire pour 15 int)Code:int (*p2)[3][5]
Les parenthèses autour de *p1 et *p2 sont nécessaires pour créer des pointeurs de tableaux d'int plutôt que des tableaux de pointeurs d'int.
alloue 2 tableaux de 5 int consécutif mémoire (soit 10 int) et place le pointeur dans p1. On pourra donc accéder de p1[0][0] jusqu'à p1[1][4]. On créé donc dynamiquement un tableau à 2 dimensions à partir d'une définition statique (à la compilation) d'un tableau à 1 dimensionCode:p1 = new int[2][5]
alloue 10 tableaux de 3 tableaux de 5 int consécutif en mémoire, soit 150 int. On pourra donc accéder de p2[0][0][0] jusqu'à p2[9][2][4]. On créé donc dynamiquement un tableau à 3 dimensions à partir d'une définition statique (à la compilation) d'un tableau à 2 dimensions.Code:p2 = new int[10][3][5]
int (*p1)[5], ça correspondrait à un pointeur du genre int[5] * p1.
Mais comme la seconde forme ne compile pas, c'est la première qui marche...
Si tu veux, tu peux t'amuser avec les typedefs:
Code:
1
2
3
4
5
6
7
8 typedef int cinqInt_t[5]; typedef cinqInt_t quinzeInt_t[3]; cinqInt_t * p1 = NULL; quinzeInt_t * p2 = NULL; int (*q1)[5]; int (*q2)[3][5]; q1 = p1; q2 = p2;