C LanguageTableaux


Introduction

Les tableaux sont des types de données dérivés, représentant une collection ordonnée de valeurs ("éléments") d'un autre type. La plupart des tableaux de C ont un nombre fixe d'éléments d'un type quelconque, et leur représentation stocke les éléments de manière contiguë dans la mémoire sans espaces ni remplissage. C permet des tableaux multidimensionnels dont les éléments sont d'autres tableaux, ainsi que des tableaux de pointeurs.

C prend en charge les tableaux alloués dynamiquement dont la taille est déterminée au moment de l'exécution. C99 et versions ultérieures prennent en charge les tableaux ou les VLA de longueur variable.

Syntaxe

  • tapez nom [longueur]; / * Définit le tableau de 'type' avec le nom 'name' et la longueur 'length'. * /
  • int arr [10] = {0}; / * Définit un tableau et initialise TOUS les éléments à 0. * /
  • int arr [10] = {42}; / * Définit un tableau et initialise les 1er éléments à 42 et le reste à 0. * /
  • int arr [] = {4, 2, 3, 1}; / * Définit et initialise un tableau de longueur 4. * /
  • arr [n] = valeur; / * Définir la valeur à l'index n. * /
  • valeur = arr [n]; / * Récupère la valeur à l'index n. * /

Remarques

Pourquoi avons-nous besoin de tableaux?

Les tableaux permettent d'organiser les objets en un agrégat ayant sa propre signification. Par exemple, les chaînes C sont des tableaux de caractères ( char s) et une chaîne telle que "Hello, World!" a la signification d'un agrégat qui n'est pas inhérent aux caractères individuellement. De même, les tableaux sont couramment utilisés pour représenter des vecteurs et des matrices mathématiques, ainsi que des listes de nombreux types. De plus, sans moyen de regrouper les éléments, il faudrait s’adresser individuellement, par exemple via des variables distinctes. Non seulement cette opération est compliquée, mais elle ne permet pas d’acquérir facilement des collections de différentes longueurs.

Les tableaux sont implicitement convertis en pointeurs dans la plupart des contextes .

Sauf en tant qu'opérande de l'opérateur sizeof opérateur _Alignof (C2011) ou opérateur unaire & (adresse-de), ou littéral de chaîne utilisé pour initialiser un (autre) tableau, un tableau est implicitement converti en ( "decays to") un pointeur sur son premier élément. Cette conversion implicite est étroitement liée à la définition de l'opérateur d'indexation du tableau ( [] ): l'expression arr[idx] est définie comme étant équivalente à *(arr + idx) . De plus, l'arithmétique du pointeur étant commutative, *(arr + idx) est également équivalent à *(idx + arr) , qui à son tour équivaut à idx[arr] . Toutes ces expressions sont valides et évaluent à la même valeur, à condition que idx ou arr soit un pointeur (ou un tableau qui se désintègre en un pointeur), l'autre est un entier et l'entier est un index valide dans le tableau vers lequel pointe le pointeur

Comme cas particulier, observez que &(arr[0]) est équivalent à &*(arr + 0) , ce qui simplifie l' arr . Toutes ces expressions sont interchangeables partout où le dernier se désintègre en un pointeur. Cela exprime simplement qu'un tableau se désintègre en un pointeur vers son premier élément.

En revanche, si l’adresse de l’opérateur est appliquée à un tableau de type T[N] ( ie &arr ), le résultat a le type T (*)[N] et pointe sur l’ensemble du tableau. Ceci est différent d'un pointeur vers le premier élément du tableau au moins en ce qui concerne l'arithmétique du pointeur, qui est défini en termes de taille du type pointé.

Les paramètres de fonction ne sont pas des tableaux .

void foo(int a[], int n);
void foo(int *a, int n);

Bien que la première déclaration de foo utilise une syntaxe de type tableau pour le paramètre a , cette syntaxe est utilisée pour déclarer un paramètre de fonction déclare ce paramètre comme un pointeur sur le type d'élément du tableau. Ainsi, la deuxième signature de foo() est sémantiquement identique à la première. Cela correspond à la décroissance des valeurs de tableau en pointeurs où ils apparaissent comme des arguments à un appel de fonction, de telle sorte que si une variable et un paramètre de fonction sont déclarés avec le même type de tableau, cette valeur peut être utilisée dans un appel de fonction argument associé au paramètre.

Tableaux Exemples Liés