Member since Aug 2013
3 posts
|
![]()
Subject: 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. |
Member since May 2011
79 posts
|
![]()
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?
|
Member since Aug 2013
3 posts
|
![]()
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.
|
Member since May 2011
79 posts
|
![]()
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 | | - | | - | `-------------´ |
Powered by the Unclassified NewsBoard software, 20110527-dev,
© 2003-8 by Yves Goergen