Pointer und Speicher

Pointer und Adressen

Ein Pointer enthält die Adresse eines kompatiblen Objekts; Dereferenzierung greift darauf zu.

Was ist Pointer und Adressen?

Ein Pointer enthält die Adresse eines kompatiblen Objekts; Dereferenzierung greift darauf zu.

Speichere eine Adresse, dereferenziere sie und ändere das Original.

Wichtige Punkte

  • Jeder Pointer verweist auf ein lebendes kompatibles Objekt oder ist null.
  • Jede eigene Allokation wird genau einmal freigegeben.
  • Formuliere Ownership und const-Schnittstellen eindeutig.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>

int main(void) {
    int score = 70;
    int *score_ptr = &score;
    *score_ptr += 5;
    printf("score=%d same-address=%s\n", score,
           score_ptr == &score ? "yes" : "no");
    return 0;
}
Erwartete Ausgabe
score=75 same-address=yes
C++
Code ausführen →
main.cpp
#include <iostream>

int main() {
    int score = 70;
    int* score_ptr = &score;
    *score_ptr += 5;
    std::cout << "score=" << score << " same-address="
              << std::boolalpha << (score_ptr == &score) << '\n';
}
Erwartete Ausgabe
score=75 same-address=true

Vergleich zwischen C und C++

C verwendet rohe Pointer direkt. C++ nutzt sie für nicht besitzenden Zugriff, bevorzugt aber Referenzen, wenn null ausgeschlossen ist.

C

Ownership und Aufräumen sind vom Programmierer durchgesetzte Konventionen.

C++

Container und RAII kodieren Ownership und Aufräumen in Objektlebenszeiten.

Übungsaufgaben

Führe beide Versionen aus und untersuche die unterschiedlichen Garantien.

  • Teste null und Allokationsfehler.
  • Verwende AddressSanitizer und UndefinedBehaviorSanitizer.
  • Dokumentiere Besitz jedes Pointers.