2D Array en C : comprendre les bases
En C, les tableaux permettent de stocker un ensemble de données associées sans avoir à créer plusieurs variables. En règle générale, les tableaux sont unidimensionnels, mais ils peuvent être étendus à autant de dimensions que vous le souhaitez. Nous vous montrons comment créer et utiliser efficacement des tableaux 2D en C.
Notions de base sur les tableaux en C
Pour pouvoir créer et maîtriser les tableaux (arrays) 2D en C, il faut d’abord avoir quelques bases sur les tableaux dans le langage de programmation C. Comme dans de nombreux autres langages, les tableaux sont des blocs de mémoire dans lesquels plusieurs valeurs du même type de données peuvent être stockées. Il est ainsi possible de stocker plusieurs valeurs sous un nom de variable et de les regrouper. La taille du tableau doit être connue au moment de la compilation et ne peut pas être modifiée ultérieurement. Le bloc de code suivant montre comment créer des tableaux en C :
int nombres1[15];
// Les valeurs stockées peuvent être spécifiées lors de la création :
int nombres2[5] = {1, 2, 3, 4, 5};
cDans cet exemple, le type de données à enregistrer est indiqué comme d’habitude avant le nom de la variable. Les crochets indiquent que cette variable n’est pas une valeur unique, mais un tableau. L’entier entre les crochets indique combien d’éléments de ce type de données peuvent être stockés dans le tableau. Dans l’exemple ci-dessus, le tableau nombres1
est créé non initialisé, ce qui signifie qu’aucune valeur n’est écrite dans les champs. Ceux-ci peuvent alors être remplis plus tard avec des valeurs dans le code.
Le tableau nombres2
est quant à lui initialisé manuellement dès sa création. Cette approche n’est pas recommandée dans la plupart des cas, car elle est très coûteuse pour les grands tableaux et le code qui en résulte est souvent peu lisible. Essayez donc plutôt de remplir vos tableaux de manière programmatique par exemple avec une boucle For :
int nombres3[100];
for(int i = 0; i < 100; i++) {
nombres3[i] = i + 1;
}
// Crée un tableau contenant les entiers de 1 à 100
cSelon le système d’exploitation sur lequel vous travaillez, le standard C que vous utilisez et l’endroit où vous avez déclaré une variable non initialisée dans votre programme, cette variable peut contenir une valeur aléatoire. Cela s’applique également pour les champs de tableau. Il est donc préférable de ne pas accéder à des champs que vous n’avez pas encore initialisés, surtout si la valeur qui y est stockée doit être interprétée comme un pointeur.
Une fois qu’un tableau a été créé, l’index permet d’accéder à des valeurs individuelles. Notez que les tableaux commencent par l’index 0. Voici un exemple :
int nombres2[5] = {1, 2, 3, 4, 5};
nombres2[3] = nombres2[2];
printf("%d\n", nombres2[3]);
// Sortie : 3
cUn array 2D en C peut être réalisé en créant un tableau dans lequel chaque champ contient un autre tableau. Découvrez-en plus dans la suite de l’article !
Array 2D en C : comment faire ?
Les tableaux 2D en C ne sont rien d’autre que des tableaux unidimensionnels dont les champs contiennent chacun un autre tableau. Un tableau 2D peut donc être considéré comme un tableau ou une matrice de valeurs. Les tableaux 2D peuvent être créés et remplis avec la syntaxe suivante :
ints_two_dimensions[10][10];
ints_two_dimensions [0][1] = 0;
ints_two_dimensions [2][1] = 2;
ints_two_dimensions [9][4] = 36;
// etc.
cIci, le nombre entre crochets de gauche représente l’index dans le premier tableau auquel on veut accéder, et celui de droite l’index dans le second. On peut se représenter ces deux nombres comme des coordonnées 2D ou des numéros de ligne ou de colonne. Comme les tableaux à une dimension, les tableaux à deux dimensions peuvent être initialisés avec des valeurs dès leur création.
floats_two_dimensions[2][6] = {
{0.1, 3.56, 6.346, 8.9, 45.345, 2.284},
{7.0, 1.12, 9.74, 0.0, 3.56, 4.4}
};
cLe principe d’un tableau à l’intérieur d’un autre tableau n’est pas limité à deux dimensions. Avec cette méthode, vous pouvez créer des tableaux avec le nombre de dimensions de votre choix.
int ints_four_dimensions[10][10][10][10];
c- Certificat SSL et protection DDoS
- Sauvegarde et restauration des données
- Assistance 24/7 et conseiller personnel
Exemples d’utilisation d’arrays 2D en C
Itérer sur un tableau 2D
Le cas d’utilisation le plus courant des tableaux 2D en C (ou des tableaux multidimensionnels) est la création de structures de données multidimensionnelles. Dans l’exemple suivant, un tableau à deux dimensions est rempli alternativement de 0 et de 1 pour représenter un échiquier :
#include <stdio.h>
#define ARRAY_LENGTH 8
int main() {
int échiquier[8][8];
for(int i = 0; i < ARRAY_LENGTH; i++) {
for(int j = 0; j < ARRAY_LENGTH; j++) {
échiquier[i][j] = (i + j) % 2;
printf("%d", échiquier[i][j]);
}
printf("\n");
}
return 0;
}
/*
Sortie :
01010101
10101010
01010101
10101010
01010101
10101010
01010101
10101010
*/
cUn tableau de chaînes de caractères
Un détail qui a son importance pour une utilisation habile des tableaux : un tableau n’est en fait qu’un pointeur vers un endroit de la mémoire et c’est ainsi que le compilateur C le comprend. L’index, qui est indiqué lors de l’écriture ou de la lecture de champs individuels, représente donc le déplacement le long du tableau par rapport à l’adresse de base. L’exemple suivant permet d’illustrer :
int nombres2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *nombres2);
// Sortie: 1
printf("%d\n", *(nombres2 + 2));
// Sortie: 3
cLes chaînes de caractères sont traitées de la même manière en C. Ainsi, il est possible d’itérer sur une chaîne de caractères comme s’il s’agissait d’un tableau. C’est ce que montre l’exemple suivant, dans lequel trois ensembles stockés dans un tableau sont affichés caractère par caractère en majuscules. Pour accéder aux caractères, on utilise le champ d’index du tableau (crochets) :
#include <stdio.h>
int main() {
char* phrases[3];
phrases[0] = "Bonjour, ceci est la première phrase.\n";
phrases[1] = "Ceci est seulement la deuxième phrase.\n";
phrases[2] = "Et maintenant, il y en a trois.\n";
printf("Phrases originales :\n\n");
for(int i = 0; i < 3; i++) {
printf("%s", phrases[i]);
}
printf("\nPhrases modifiées :\n\n");
for(int i = 0; i < 3; i++) {
int j = 0;
while(phrases[i][j] != '\n') {
if(phrases[i][j] >= 'a' && phrases[i][j] <= 'z') {
printf("%c", phrases[i][j] - 0x20);
} else {
printf("%c", phrases[i][j]);
}
j++;
}
printf("\n");
}
return 0;
}
// Sortie :
Phrases originales :
Bonjour, ceci est la première phrase.
Ceci est seulement la deuxième phrase.
Et maintenant, il y en a trois.
Phrases modifiées :
BONJOUR, CECI EST LA PREMIERE PHRASE.
CECI EST SEULEMENT LA DEUXIEME PHRASE.
ET MAINTENANT, IL Y EN A TROIS.
*/
c