kann mir das nicht mal jemand für doofe erklären?
Ne sorry, Pointer sind nix für doofe
Für alle anderen: es war mir am Anfang auch bisschen schleierhaft, wie das alles zusammenhängt, aber man muss immer den Unterschied von deklaration und Nutzung im Kopf behalten.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
int *pint = 0; // * legt fest, dass pint ein Pointer ist
pint = new int(2); // da pint ein Pointer ist greift man ohne * oder & darauf zu
*pint = 5; // hier wird der Pointer per * dereferenziert und man greift auf die Variable zu
int **ppint = &pint; // im ersten Teil wird per ** festgelegt, dass ppint ein Pointer auf einen Pointer auf int ist, im 2. Teil wird per & auf die Adresse vom Pointer auf int zugegriffen
if (**ppint == *pint && *ppint == pint && ppint == &pint)
return 0; // alles ist so wie es sein soll
else
return -1; // das hier würde bedeuten, dass aus irgendeinem Grund die Zusammenhänge zwischen den verschiedenen Zugriffsebenen zerstört wurden
|
Bei einer Definition von einen Pointer [auf einen Pointer [auf einen Pointer...]] sollte man jedes * als eine weitere Adressebene verstehen. Das ist vor allem im Zusammenhang mit const wichtig.
(Bitte meinen Wulst an c und p nicht im Sinne der Ungarischen Notation verstehen
ich hab stattdessen einfach die Deklaration rückwärts aufgeschlüsselt (wobei der Typ an 1. Stelle der Deklaration steht))
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
int i = 2;
const int ci = 4; // der Wert 4 ist konstant
int const ci2 = 5; // das selbe in grün, es ist egal, ob const vor oder nach dem int kommt
int *pi = &i; // einfacher Pointer auf i
int * const cpi = &i; // konstanter Pointer auf nicht konstantes i
int *pi2= &ci; // FEHLER, ci ist konstant!
int const *pci = &ci; // so ist richtig, das int ist konstant, der Pointer kann aber auch auf ein anderes Element zeigen
int const * const cpci = &ci2; // Auch richtig, jetzt sind sowohl der Integer als auch der Pointer const
int const ** const cppci = &ci; // konstanter Pointer auf nicht konstanten Pointer auf konstanten Integer
int * const * const cpcpi = cpi; // konstanter Pointer auf konstanten Pointer auf nicht konstanten Integer
|
Is jetzt sicher bissl Brainfuckmäßig, aber so siehts halt aus