Je sais que c'est une ancienne châtaigne, mais je veux un petit tableau 2D alloué statiquement dans mon code. Je sais que c'est le cas:
int *A0 = { 1, 2 };
int *A1 = { 3, 4 };
int *A2 = { 5, 6 };
int **A = { A0, A1, A2 };
3 Réponses :
Un tableau multidimensionnel ne devient pas un pointeur multi-niveaux (je ne connais pas le terme approprié). Une seule dimension se désintègre. Par exemple: p>
S'il y a un grand désir d'utiliser des tableaux multidimensionnels (via la int [20] code> devient int * code>; int [20] [5] code> devient int (*) [5] code> (qui n'est pas int ** code>); c. p>
[r] [c] code> syntaxe), vous devez passer les autres limites (qui doivent être des constantes). Si des limites variables sont nécessaires, je pense que la meilleure option consiste à effectuer la conversion d'index manuellement (c'est-à-dire au lieu de A [R] [C] code>, utilisez A [R * C + C] < / code>). p>
En C99, il est possible de définir des fonctions telles que ceci: "VOID F (INT C, INT A [] [C]) ..." ou "VOID F (INT C, INT (* A) [C]) ... ". Après cela, vous pouvez indexer la matrice comme tout autre tableau multidimensionnel.
Le moyen le plus rapide est de déclarer argument A code> comme int A [] [2] code>. void print_matrix(int[][2] a, int r, int c);
// and call the function like this:
print_matrix(A, 3, 2);
Ceci est C, donc void print_matrix (int A [] [2],
Row 00 = 0x5eaeda70 = 1, 2 Row 01 = 0x5eaeda68 = 3, 4 Row 02 = 0x5eaeda60 = 5, 6
Je commencerais par consulter Cette question dans la FAQ C suivie de cette Section entière .