7
votes

Initialisation du tableau 2D en C

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 };


1 commentaires

Je commencerais par consulter Cette question dans la FAQ C suivie de cette Section entière .


3 Réponses :


13
votes

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:

int [20] devient int * ; int [20] [5] devient int (*) [5] (qui n'est pas int ** ); c.

S'il y a un grand désir d'utiliser des tableaux multidimensionnels (via la [r] [c] 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] , utilisez A [R * C + C] < / code>).


1 commentaires

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.



1
votes

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);


1 commentaires

Ceci est C, donc void print_matrix (int A [] [2], ) .



2
votes
Row 00 = 0x5eaeda70 = 1, 2
Row 01 = 0x5eaeda68 = 3, 4
Row 02 = 0x5eaeda60 = 5, 6

0 commentaires