Mäx schrieb:
> erhalten bleiben und ich will doch nur a und b befüllen bzw später auch
> auslesen
Das versteh ich schon.
Nur sind a und b keine Membervariablen in denen du einen char oder einen
int ablegen kannst!
Das sind Pointer!
1 | int main()
|
2 | {
|
3 | int * ptr;
|
4 | int j;
|
5 |
|
6 | ptr = &j;
|
7 |
|
8 | *ptr = 5;
|
9 | }
|
baut das hier im Speicher auf
1 | ptr j
|
2 | +----+ +----+
|
3 | | o------------------->| 5 |
|
4 | +----+ +----+
|
Das ganze geht auch mit 'anonymen Speicher'
1 | int main()
|
2 | {
|
3 | int * ptr;
|
4 |
|
5 | ptr = malloc( sizeof( int ) );
|
6 |
|
7 | *ptr = 8;
|
8 |
|
9 | free( ptr );
|
10 | }
|
Das baut im Grunde dieselbe Struktur auf, nur dass der Speicher auf den
ptr zeigt, jetzt keinen Variablennamen mehr hat und erst zur Laufzeit
des Programms angefordert wird:
1 | ptr
|
2 | +----+
|
3 | | o-----------+
|
4 | +----+ |
|
5 | |
|
6 | | +----+
|
7 | +----->| 8 |
|
8 | +----+
|
Aber: Der Wert 8 wird nicht in ptr gespeichert! Er wird dort
gespeichert, wo ptr hinzeigt.
Wichtig ist: Egal wie und warum, am Ende des Pfeiles muss es ein
Kästchen geben, in dem ein Wert abgelegt werden kann oder aus dem
gelesen werden kann. Der Pfeil selbst zeigt nur an, wo das ist. Aber der
Pfeil muss auf für dein Programm reservierten Speicher zeigen
(symbolisiert durch das Kästchen). Tut er das nicht, dann geht ein
Schreibversuch 'in den Wald' und du beschreibst Speicher von dem kein
Mensch weiß wo sich der im Speicher befindet. Und das darf ein
Laufzeitsystem/Betriebssystem nach Möglichkeit nicht zulassen.
In deinem Fall hast du mit
dieses hier erzeugt
1 | eintrag1
|
2 | +----------+
|
3 | | a: o---------------------->
|
4 | +----------+
|
5 | | b: o-------------------------->
|
6 | +----------+
|
Die Pfeile zeigen irgendwo hin (weil sie ja irgendeinen Wert immer haben
müssen). Aber wo zeigen sie hin? Am Ende der Pfeile existiert kein
Kästchen, in dem man einen Wert ablegen könnte.