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++
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;
}
score=75 same-address=yes
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';
}
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.