Bukker Geschrieben 19. Januar 2003 Geschrieben 19. Januar 2003 Ich schriebe am Di ne Arbeit in Informatik u.a. mit dem Thema Zeigern und war gerade auf dem besten Wege das Thema zu verstehen als mir plötlzich folgende zeilen unterkamen: #include <stdio.h> void main() flaot feld[] = {11.1,2.2,3.3,A.4,5.5} float *fpointer = &feld[0] int a,k printf ("%p : %f\n", fpointer, *fpointer); for (k = 0; K<5; k++) printf ("%p : %f\n", fpointer++, *fpointer); printf ("%P : %f\n", fpointer--, *fpointer); printf ("%p : %f\n", fpointer, *fpointer) int a = -31200; printf ("%P : %d\n", &a,a) } Da komme ich nicht mehr mit :confused: Könnt ihr mir das bitte erklären !? Danke ! Zitieren
Klotzkopp Geschrieben 19. Januar 2003 Geschrieben 19. Januar 2003 Hast du nähere Informationen dazu? Soll dieser Code etwas demonstrieren? Oder ist das eine Fehlersuchaufgabe? Denn selbst wenn man die Fehler rausmacht, macht der Code nichts sinnvolles. printf ("%p : %f\n", fpointer++, *fpointer);Was dabei herauskommt, ist sowieso nicht vorhersagbar, weil der Standard die Reihenfolge der Auswertung von Funktionsargumenten nicht festlegt. Zitieren
SgtBadAzz Geschrieben 19. Januar 2003 Geschrieben 19. Januar 2003 Originally posted by Bukker Ich schriebe am Di ne Arbeit in Informatik u.a. mit dem Thema Zeigern und war gerade auf dem besten Wege das Thema zu verstehen als mir plötlzich folgende zeilen unterkamen: #include <stdio.h> void main() flaot feld[] = {11.1,2.2,3.3,A.4,5.5} float *fpointer = &feld[0] int a,k printf ("%p : %f\n", fpointer, *fpointer); for (k = 0; K<5; k++) printf ("%p : %f\n", fpointer++, *fpointer); printf ("%P : %f\n", fpointer--, *fpointer); printf ("%p : %f\n", fpointer, *fpointer) int a = -31200; printf ("%P : %d\n", &a,a) } Da komme ich nicht mehr mit :confused: Könnt ihr mir das bitte erklären !? Danke ! Also wenn man mal die kleineren Tippfehler vernachlaessigt ... sehe ich nicht was da besonders schwer zu verstehen ist. Was verstehst du denn genau nicht ? Frank Zitieren
Bukker Geschrieben 19. Januar 2003 Autor Geschrieben 19. Januar 2003 Also ich verstehe es bis hierhin: #include <stdio.h> void main() flaot feld[] = {11.1,2.2,3.3,A.4,5.5} Es wird einfach die Header Datei bestimmt, ein array namens feld eingelesen das die folgendes Zahlen beinhaltet... float *fpointer = &feld[0] //Deklaration des Zeigers fpointer mit Speicheradresse übergabe des Feldes beginnend von Null oder!? int a,k //Deklaration der Variablen A und K und dieser ganze Rest printf ("%p : %f\n", fpointer, *fpointer); for (k = 0; K<5; k++) printf ("%p : %f\n", fpointer++, *fpointer); printf ("%P : %f\n", fpointer--, *fpointer); printf ("%p : %f\n", fpointer, *fpointer) int a = -31200; printf ("%P : %d\n", &a,a) ergibt für mich keinen Sinn. Der ganze Block sagt mir nix. @ Klotzkopp: Es ist einfach nur ein Blatt das uns ausgeteilt wurde. Komplett sieht es so aus: **********BLATT************* float feld [] = {1.1,2.2,3.3,4.4,5.5} float *fpointer; int k; for (k = 0;k<5;k++) {fpointer = &feld[k]; printf ("%f\n", *fpointer);} ist mit dem entsprechenden Teil (ergänzt um Anzeigen von Adresse!) in /*point.c Zeigervariable*/ #include <stdio.h> void main() flaot feld[] = {11.1,2.2,3.3,A.4,5.5} float *fpointer = &feld[0] int a,k printf ("%p : %f\n", fpointer, *fpointer); for (k = 0; K<5; k++) printf ("%p : %f\n", fpointer++, *fpointer); printf ("%P : %f\n", fpointer--, *fpointer); printf ("%p : %f\n", fpointer, *fpointer) int a = -31200; printf ("%P : %d\n", &a,a) } *******BLATT ENDE******* Zitieren
SgtBadAzz Geschrieben 19. Januar 2003 Geschrieben 19. Januar 2003 Originally posted by Bukker Also ich verstehe es bis hierhin: #include <stdio.h> void main() flaot feld[] = {11.1,2.2,3.3,A.4,5.5} Es wird einfach die Header Datei bestimmt, ein array namens feld eingelesen das die folgendes Zahlen beinhaltet... float *fpointer = &feld[0] //Deklaration des Zeigers fpointer mit Speicheradresse übergabe des Feldes beginnend von Null oder!? int a,k //Deklaration der Variablen A und K und dieser ganze Rest printf ("%p : %f\n", fpointer, *fpointer); for (k = 0; K<5; k++) printf ("%p : %f\n", fpointer++, *fpointer); printf ("%P : %f\n", fpointer--, *fpointer); printf ("%p : %f\n", fpointer, *fpointer) int a = -31200; printf ("%P : %d\n", &a,a) ergibt für mich keinen Sinn. Der ganze Block sagt mir nix. @ Klotzkopp: Es ist einfach nur ein Blatt das uns ausgeteilt wurde. Komplett sieht es so aus: **********BLATT************* float feld [] = {1.1,2.2,3.3,4.4,5.5} float *fpointer; int k; for (k = 0;k<5;k++) {fpointer = &feld[k]; printf ("%f\n", *fpointer);} ist mit dem entsprechenden Teil (ergänzt um Anzeigen von Adresse!) in /*point.c Zeigervariable*/ #include <stdio.h> void main() flaot feld[] = {11.1,2.2,3.3,A.4,5.5} float *fpointer = &feld[0] int a,k printf ("%p : %f\n", fpointer, *fpointer); for (k = 0; K<5; k++) printf ("%p : %f\n", fpointer++, *fpointer); printf ("%P : %f\n", fpointer--, *fpointer); printf ("%p : %f\n", fpointer, *fpointer) int a = -31200; printf ("%P : %d\n", &a,a) } *******BLATT ENDE******* Es wurde ja auch nicht nach dem Sinn gefragt sondern was da generell gemacht wird. fpointer++ ist ein Postinkrement des Float Zeigers auf das naechste Element, analog --fpointer ein Predekrement und dann wird der Wert ausgegeben auf den der Zeiger aktuell zeigt, d.h. das entsprechende Element des Arrays. Hast du das mal ausprobiert oder nicht ? Frank Zitieren
Bukker Geschrieben 19. Januar 2003 Autor Geschrieben 19. Januar 2003 Was da genau gemacht wird wollte ich ja wissen... Ja ich habs versucht aber es trat ein Prob mit dem Debugger auf und ich konnte es nciht ausführen Zitieren
Crush Geschrieben 19. Januar 2003 Geschrieben 19. Januar 2003 Zeile für Zeile... (auffällige Korrekturen vorgenommen) float feld [] = {1.1,2.2,3.3,4.4,5.5} -> Erstellen eines float-Arrays float *fpointer; int k; -> Deklaration eines float Zeigers und einer int-Variablen for (k = 0;k<5;k++) // sollte nur k<4 sein, weil Wert 5 bei "printf ("%p : %f\n", fpointer--, *fpointer);" überschritten wird -> 5 Einträge durchgehen {fpointer = &feld[k]; printf ("%f\n", *fpointer);} -> Den Zeiger auf das feld[0] zeigen lassen und den Inhalt des Felds darüber ausgeben ist mit dem entsprechenden Teil (ergänzt um Anzeigen von Adresse!) in /*point.c Zeigervariable*/ #include <stdio.h> void main() { float feld[] = {11.1,2.2,3.3,4.4,5.5}; -> Erstellen eines float-Arrays float *fpointer = &feld[0]; -> den Zeiger auf die Adresse von Feld[0] einstellen int a,k; -> zwei Int-Variablen deklarieren; a wird weiter unten verwendet printf ("%p : %f\n", fpointer, *fpointer); -> Adresse & Inhalt des Zeigers ausgeben for (k = 0; K<5; k++) { -> 5 Einträge durchgehen printf ("%p : %f\n", fpointer++, *fpointer); -> vorheriger Zeiger in hex & Inhalt ausgeben printf ("%p : %f\n", fpointer--, *fpointer); -> nachfolgender Zeiger in hex & Inhalt ausgeben printf ("%p : %f\n", fpointer, *fpointer); -> nochmal vorheriger Zeiger in hex & Inhalt ausgeben und das auch noch 5 mal (hintereinander) wodurch beim 5. Durchlauf ein undefinierter Wert bei der 2. Ausgabe erfolgt, da das 6. Feld gar nicht definiert wurde, also purer Speicher hart dargestellt wird (wurde oben angesprochen) } a = -31200; -> Variable wurde oben schon deklariert, existiert also schon! -> eine Zahl in a reinschreiben printf ("%P : %d\n", &a,a) -> dessen Adresse und Wert ausgeben } Zitieren
SgtBadAzz Geschrieben 20. Januar 2003 Geschrieben 20. Januar 2003 Originally posted by Bukker Was da genau gemacht wird wollte ich ja wissen... Ja ich habs versucht aber es trat ein Prob mit dem Debugger auf und ich konnte es nciht ausführen Kannste mal GENAU hier schreiben was denn nun in der Schleife ausgefuehrt werden soll ? Also was GENAU auf deinem Blatt da steht. Gruss, Frank Zitieren
Bukker Geschrieben 20. Januar 2003 Autor Geschrieben 20. Januar 2003 @SgtBadAzz: Nee das war ja das Blatt was ich oben schon stehn hab, mehr steht da nicht. @ Crush: Danke das wollte ich wissen :-D Was da in jeder Zeile passiert THX ! :-D Thread kann geschlossen werden Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.