Tableaux (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Structure du langage - Index


La déclaration :

type declarator [<expression-constante>]

déclare un tableau composé d'éléments de type. Un tableau est une zone de stockage continue suffisamment grande pour contenir tous ses éléments.

Si une expression est contenue dans un déclarateur de tableau, elle doit fournir comme résultat une valeur positive entière. La valeur est le nombre d'éléments du tableau. Chacun des éléments est numéroté de zéro au nombre total des éléments moins un.

Les tableaux multidimensionnels sont construits en déclarant des tableaux de tableaux. Les exemples suivants montrent une façon de déclarer un tableau bidimensionnel. Il est implémenté avec trois lignes et cinq colonnes, mais il peut être facilement modifié pour s'adapter à ce que saisira un utilisateur au moment de l'exécution.

/* ALLOCATION MEMOIRE DYNAMIQUE POUR UN OBJET MULTIDIMENSIONNEL. */
// ---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <vcl.h>
#pragma hdrstop

#include <tchar.h>
// ---------------------------------------------------------------------------

#pragma argsused

int _tmain(int argc, _TCHAR* argv[]) {
    double **m;
    const int rows = 3, columns = 4;
    unsigned int i, j;

    /* DEFINIR LES LIGNES */
    m = (double**) calloc(rows, sizeof(double*));

    /* DEFINIR LES COLONNES */
    for (i = 0; i < rows; ++i) {
        m[i] = (double*) calloc(columns, sizeof(double));
    }

    /* INITIALISER */
    for (i = 0; i < rows; i++) {
        for (j = 0; j < columns; j++) {
            m[i][j] = (double)(i + j) / 10.0;
        }
    }

    for (i = 0; i < rows; ++i) {
        puts("");
        for (j = 0; j < columns; ++j) {
            printf("%4.4lf  \t", m[i][j]);
        }
    }

    /* DESALLOUER */
    /* SUPPRIMER CHAQUE COLONNE */
    for (i = 0; i < rows; i++) {
        free(m[i]);
    }
    /* SUPPRIMER LE POINTEUR DE BASE */
    free(m);
    return 0;
}
// ---------------------------------------------------------------------------

Ce code produit les résultats suivants :

0.0000 0.1000 0.2000 0.3000
0.1000 0.2000 0.3000 0.4000
0.2000 0.3000 0.4000 0.5000

Dans certains contextes, le premier déclarateur d'une série peut ne contenir aucune expression entre crochets. Un tel tableau est de taille indéterminée. C'est possible lorsque la taille du tableau n'est pas indispensable pour réserver un espace.

Par exemple, dans une déclaration extern de tableau, il est inutile de mentionner les dimensions exactes, de même que pour un paramètre de fonction de type tableau. Par une extension de la norme ANSI du langage C, Borland C++ accepte également un tableau de taille indéterminée comme membre final d'une structure. Ces tableaux n'augmentent pas la taille de la structure ; toutefois l'ajout de caractères de remplissage permet de s'assurer que le tableau est correctement aligné. Ces structures sont généralement utilisées dans les allocations dynamiques, la taille du tableau réellement nécessaire doit être explicitement mentionnée et ajoutée à la taille de la structure pour que la réservation de l'espace requis soit correcte.

Sauf lorsqu'il s'agit de l'opérande d'un opérateur sizeof ou &, une expression de type tableau est convertie en pointeur sur le premier élément du tableau.

Voir aussi