Nicht angemeldet. · Kennwort vergessen · Registrieren

an24epyr
Mitglied seit 08/2013
3 Beiträge
Betreff: klausur Juli 2012 Aufgabe 3-c
hallo,
hat jemand ein Idee auf diese Frage und kann mir helfen?
Gruess
struct vect{
      uint8_t x;
      uint8_t y;
};
struct vect coords[3];
struct vect *pos = &coords[1];

Skizzieren sie, wie die einzelnen Elemente von coords im Speicher abgeleg. Zeichnen sie ausserdem ein, an welche Speicherstelle die Variable pos vor und nach der Ausfuehrung der Operation pos++ zeigt.
Raim
GSPiC-Guru
Mitglied seit 05/2011
79 Beiträge
Was hast du dir denn dazu bisher denn schon für Gedanken gemacht? Welche Größe belegt denn das struct im Speicher? Was bedeutet die Operation ++ auf einem Pointer?
an24epyr
Mitglied seit 08/2013
3 Beiträge
Bis jetzt denke ich, dass struct vect coords[3] 3 Eintraege von jeder 8 Bits hat und fuer jeweils Eintraege ein vect mit x und y besteht. Die 3 Eintraege haben jeweils die Position 1, 3 und 5. Aber ich verstehe nicht genau wie soll die pos(vorher) und pos(nachher) mit dem coords verbuden sein.
Raim
GSPiC-Guru
Mitglied seit 05/2011
79 Beiträge
Das struct besteht aus zwei Variablen x und y mit jeweils 8 Bit (1 Byte). Damit belegt eine Variable vom Typ struct vect 2 Byte im Speicher. Das Array enthält 3 Elemente dieses Typs. In die Zeichnung soll also eingetragen werden, dass jeweils x und y hintereinander mit jeweils 1 Byte im Speicher liegen.

Der Zeiger pos wird mit &coords[1] initialisiert, zeigt also auf coords[1].x. Also auf das "zweite" Element im Array, da die Nummerierung des Index bei 0 beginnt. Nun wird die Operation pos++; durchgeführt, was in dieser Kurzschreibweise pos = pos + 1; entspricht. Bei der Arithmetik mit Zeigern muss man beachten, dass dabei immer mit der Größe des Typs auf den gezeigt wird gerechnet wird. In diesem Fall wird der Pointer wie oben beschrieben also um 2 Byte erhöht und zeigt dann auf coords[2] bzw. genauer auf coords[2].x.

                1 Byte
            ´-------------`
            | coords[0].x |
            | coords[0].y |
pos ----->  | coords[1].x |
 |          | coords[1].y |
 `------->  | coords[2].x |
     ++     | coords[2].y |
            | -           |
            | -           |
            `-------------´
Schließen Kleiner – Größer + Auf diesen Beitrag antworten:
Prüfcode: VeriCode Gib bitte das Wort aus dem Bild ins folgende Textfeld ein. (Nur die Buchstaben eingeben, Kleinschreibung ist in Ordnung.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Weitere Zeichen:
Gehe zu Forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen