Zum Inhalt springen

Keine Ahnung vom folgendem Pointer


Bukker

Empfohlene Beiträge

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 ! :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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*******

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...