Fragen C-Tutorial Kapitel Strukturen Verwalten

Diskussionen zu Tutorials, Änderungs- und Erweiterungswünsche
Antworten
Ramnad
Beiträge: 12
Registriert: Do Okt 29, 2015 3:10 pm

Fragen C-Tutorial Kapitel Strukturen Verwalten

Beitrag von Ramnad » Di Nov 17, 2015 11:30 am

Hi an alle,

ja wie schon die überschrift sagt habe ich einige Fragen zum obengenannten Kapitel und zwar geht es um den code im Unterkapitel Arrays von Zeigern.

Dort wird ja zunächst wenn ich das richtig verstehe ein array von zeigern vom Typ char, der größe 3, deklariert. Also kann ich dort 3 zeiger speichern die auf ein auf eine variable vom typ char zeigen.

Code: Alles auswählen

char * playField[3];
dann wird über eine Schleife speicher mit der größe von 3 bytes freigegelgt und die adressen im diesem array gespeichert.

Code: Alles auswählen

for( x = 0; x < 3; ++x )
    playField[x] = (char*) malloc(3);
SO nun die Fragen:
1. warum steht in nachfolgenden text das der array 24 bytes groß sein soll? Dort wird gesagt das man 3 adressen mit je 8 bytes hat aber man hat doch 3 adressen mit je 3 bytes Freigelgegt, somit müsste das array doch 9 bytes groß sein oder nicht? (habe es auf einem 64-bit system ausprobiert)
Das komische ist auch noch, dass wenn ich diesen code compiliere und ausführe, keine 24 oder 9 bytes als ausgabe bekomme sonder 12 bytes was ich dann garnicht einordnen kann.

2. ich habe ja eine eindimensionales array playField definiert warum kann ich dann auf über eine "zweidimensionalen" zugriff werte in die gespeichert adressen übergeben?

Code: Alles auswählen

playField[x][y] = ' ';
Sorry für den langen text, aber sonst glaube ich versteht man meinen gedankengang nicht.

Hoffe könnt einbischen licht ins dinkel bringen.

Viel Grüße
Ramnad

Nemo
Beiträge: 37
Registriert: Sa Mär 02, 2013 3:18 pm

Re: Fragen C-Tutorial Kapitel Strukturen Verwalten

Beitrag von Nemo » Di Nov 17, 2015 4:55 pm

Hallo,

für deine erste Frage ist eigentlich nur dieser Teil entscheidend:

Code: Alles auswählen

* playField[3];
Nein, da fehlt nichts. Auf was der Zeiger verweist, ist für seine Größe vollkommen unwichtig. Ein Zeiger ist immer 4 oder 8 bytes groß(bei heutigen PCs). Er zeigt auf genau ein Byte im Speicher, was das für ein Byte ist und zu welcher größeren Struktur es eventuell gehört spielt keine Rolle. Ich vermute daher, dass du einen 32bit Compiler verwendest und drei Zeiger deshalb 12 Bytes groß sind.

Code: Alles auswählen

playField[x][y] = ' ';
Ist in diesem Fall das gleiche wie

Code: Alles auswählen

*( *(playField + x) + y )
Du greifst zuerst auf das x-te Element des Arrays zu, in diesem Fall ist das ein Zeiger. Dann behandelst du den so erhaltenen Zeiger als Array und greifst auf sein y-tes Element zu, in diesem Fall ein char.

Ich hoffe ich konnte dir damit helfen.

Ramnad
Beiträge: 12
Registriert: Do Okt 29, 2015 3:10 pm

Re: Fragen C-Tutorial Kapitel Strukturen Verwalten

Beitrag von Ramnad » Di Nov 17, 2015 11:20 pm

Hi Nemo
ja danke für deine hilfe, jetzt wird einiges klar. da habe ich einige denkfehler gehabt :oops:

aufjedenfall danke nochmal ! :D

Viele Grüße
Ramnad

Antworten