Weiterführendes Beispiel zu Pointern

main()
{
    int j;
    int k;
    int l;
    int ii;

    int *pt1;           // int pointer
    int *pt2;           // int pointer
    float values[100];  // Feld mit 100 Float-Werten
    float results[100]; // Feld mit 100 Float-Werten
    float *pt3;         // float pointer
    float *pt4;         // float pointer

    j = 1;
    k = 2;

    pt1 = &j;           // 'pt1' beinhaltet die Addresse von 'j'
    pt2 = &k;           // 'pt1' beinhaltet die Addresse von 'k'
    pt3 = values;       // 'pt3' beinhaltet die Addresse des ersten Elements von 'values'
    pt3 = &values[0];   // das gleiche wie oben

    pt3++;              // 'pt3' beinhaltet nun die Adresse des zweiten 'value'-Elements
    *pt3 = 3.1415927;   // das zweite 'value'-Element hat nun den Wert 'Pi'
    pt3 += 25;          // pt3 zeigt nun auf das 26ste Element von 'values'
    *pt3 = 2.22222;     // das 26ste Element von 'values' ist nun 2.22222
    pt3 = values;       // 'pt3' zeigt nun auf den Beginn von 'values'

    for (ii = 0; ii < 100; ii++)
    {
        *pt3++ = 37.0;  // alle Werte des Arrays werden auf den Wert 37.0 gesetzt
    }

    pt3 = &values[0];   // pt3 beinhaltet die Addresse des ersten Elements von 'values'
    pt4 = &results[0];  // pt4 beinhaltet die Addresse des ersten Elements von 'results'

    for (ii=0; ii < 100; ii++)
    {
        *pt4 = *pt3;    // Die Inhalte an der Adresse 'pt3' werden mit den Inhalten an der Adresse 'pt4' gleichgesetzt
        pt4++;
        pt3++;
    }
}

Grundlegendes zu Pointern

  • Adresse eines Pointers:
int *ptr; // Zeiger auf einen int-Wert
int count = 1;

ptr = &count // Gibt die Addresse von 'count' an 'ptr*' zurück
  • Wert eines Pointers:
int total = *ptr; // Der Wert an der Adresse 'ptr' wird an 'total' übergeben

Dynamisches 2D-Array mit new erzeugen (Doublepointer)

  • Im Beispiel wir ein dynamisches 2D-Array mittels Doublepointern erzeugt, verwaltet und wieder gelöscht

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
int iRasterX1 = 10; // 10*20 Elemente
int iRasterX2 = 20;

// 2D Array erzeugen
// dazu wird ein Pointer auf einen Pointer deklariert,
// erstmal einen einfachen Vektor mit iRasterX1 (10) Elementen erzeugen
float **faVal = new float*[iRasterX1];

// danach für jedes Element des Vektors iRasterX2 (20) Unterelemente erzeugen
for (int i=0; i