Arrays (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Zeiger - Index (C++)


Die Deklaration

type Deklarator [<Konstantenausdruck>]

deklariert ein Array, das sich aus den Elementen des Typs type zusammensetzt. Ein Array besteht aus einem zusammenhängenden Speicherbereich, der so groß ist, dass alle Elemente darin Platz finden.

Wenn ein Array-Deklarator einen Ausdruck beinhaltet, muss dieser eine positive Integerkonstante ergeben. Der Wert bezeichnet die Anzahl der Array-Elemente. Jedes Element in einem Array ist numeriert und zwar von 0 bis zur Anzahl der Elemente minus Eins.

Mehrdimensionale Arrays werden durch Deklaration von Arrays des Typs Array aufgebaut. Im folgenden Beispiel wird gezeigt, wie ein zweidimensionales Array erstellt wird. Die Beispiel-Implementierung erzeugt drei Zeilen und fünf Spalten, kann aber sehr leicht so verändert werden, dass dies zur Laufzeit durch Benutzereingaben gesteuert werden kann.

 /* DYNAMISCHE SPEICHERRESERVIERUNG FÜR EIN MEHRDIMENSIONALES OBJEKT */
// ---------------------------------------------------------------------------
 #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;

   /* RICHTEN SIE DIE ZEILEN EIN. */
   m = (double**) calloc(rows, sizeof(double*));

   /* RICHTEN SIE DIE SPALTEN EIN. */
   for (i = 0; i < rows; ++i) {
        m[i] = (double*) calloc(columns, sizeof(double));
    }

    /* INITIALISIEREN */ 
    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]);
        }
    }

    /* FREIGEBEN */
    /* JEDE SPALTE LÖSCHEN */
    for (i = 0; i < rows; i++) {
        free(m[i]);
    }
    /* BASISZEIGER LÖSCHEN */
    free(m);
    return 0;
}
// ---------------------------------------------------------------------------

Dieser Quelltext liefert folgende Ausgabe:

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

Unter Umständen hat der erste von mehreren Array-Deklaratoren keinen Ausdruck in den Klammern. Ein derartiges Array ist von unbestimmter Größe. Dies ist dann zulässig, wenn die Größe eines Arrays nicht zur Speicherplatzreservierung erforderlich ist.

Die genaue Größe eines Arrays ist z.B. weder in der extern-Deklaration eines Array noch bei der Angabe eines Array-Funktionsparameters erforderlich. Eine Erweiterung in Borland C++ (gegenüber ANSI C) stellt die Möglichkeit dar, ein Array mit unbestimmter Größe als letztes Element in einer Struktur einzusetzen. Ein derartiges Array vergrößert den Umfang der Struktur nur, wenn ein Dummy-Byte eingefügt wird, damit das Array an einer Wortgrenze beginnt. Diesen Strukturen wird normalerweise dynamisch Speicher zugewiesen. Diese Strukturen finden normalerweise bei dynamischer Speichererweiterung Anwendung. Die Größe des aktuellen Arrays muss explizit der Strukturgröße hinzugefügt werden, damit genügend Speicherplatz reserviert wird.

Ein Arraytyp-Ausdruck wird in einen konstanten Zeiger auf das erste Element des Arrays konvertiert, es sei denn, er ist der Operand eines sizeof- oder &-Operators.

Siehe auch