Forum: Mikrocontroller und Digitale Elektronik Frage zu Zeigern


von macke_a (Gast)


Lesenswert?

Hallo!
Ich mal ein Frage zu Zeigern. In diesem Thema bin ich noch nicht so fit, 
sodaß ich lieber noch einmal nachfrage. Folgende Situation aus einem 
Programmausschnitt, den ich verwenden muss:

struct tm*ptim;
int tm_sec;
int tm_min;

...

scanf("%d", &ptim -> tm_sec);
scanf("%d", &ptim -> tm_min);

Ich möchte gerne den Wert nicht über die Tastatur einlesen, sondern den 
Wert direkt, als Variable übergeben.
Kann mir jemand damit weiterhelfen?
Falls Info´s fehlen, kommen diese umgehend!
Danke...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ich vermute mal, daß tm_sec und tm_min Elemente der Struktur tm sein 
sollen.

Eine Wertzuweisung sieht dann so aus:

  ptim->tm_sec = 0;
  ptim->tm_min = 36;

von macke_a (Gast)


Lesenswert?

Richtig, tm_sec und tm_min sind Elemente einer Struktur !
Allerdings mekkert mein Compiler; keil µV3 da

exppression must be a modifiable lvalue

Kannst Du mir da weiterhelfen?

von Karl heinz B. (kbucheg)


Lesenswert?

Poste bitte, bitte, bitte dein vollständiges Program.
Falls das zu lang sein sollte (eigenes Ermessen), dann
kürze es so, dass alles für das Problem nicht wesentliche
rausfällt.

Pointer sind eigentlich ganz einfach:

Jede Variable bzw. überhaupt jedes Ding muss ja
irgendwo gespeichert sein. Daher hat es auch eine
Adresse. Das ist so, wie wenn du eine Postanalage in
einem Hochhaus hast: Dort gibt es einen Haufen Postfächer
und in jedem Postfach liegt ein Zettel. Jeder Zettel ist
eine Speicherplatz auf dem du was draufschreiben kannst.
Durch die Nummer der Postfaches hat daher jeder Zettel
eine Adresse, die ihn eindeutig identifiziert.
Auf manchen Zettel steht jetzt drauf: 'tatsächliche
Information im Postfach xyz'. Genau das sind Pointer.
Anstatt dir also zu merken, wo eine bestimmte Information
gespeichert ist, legst du sie in irgendein Postfach und
schreibst auf den Zettel im Fach 100 (nur als Beispiel)
drauf, wo du die eigentliche Information abgelegt hast.
Brauchst du die Information wieder, so musst du nicht
wissen, in welchem Fach die war. Du gehst einfach zum
Fach 100 und schaust nach in welchem Fach das liegt
was du suchst.

von Hans (Gast)


Lesenswert?

Ich kenne den keil µV3 nicht und weiss nicht, für welches System du 
kompilierst.
Kann es sein, dass in der struct tm die Variablen tm_sec und tm_min als 
"const int" deklariert sind? Oder dass diese auf ein read-only Register 
zeigen?

"exppression must be a modifiable lvalue" sieht danach aus, dass 
ptim->tm_sec zwar ein gültiger Ausdruck ist, aber als linke Seite 
(lvalue) einer Zuweisung nicht verändert werden kann.

Poste mal die Deklaration der struct tm.

von macke_a (Gast)


Angehängte Dateien:

Lesenswert?

Hallo !
Also ich habe mal das ganze pdf mit geladen. Dort erkennt man die 
Zusammenhänge auf Seite 7/9. Wie ich bereits erwähnte, möchte ich die 
Parameter für tm_sec  tm_min  tm_hour nicht über die Tastatur, sondern 
mittels einer Variabe übergeben. Allerdings funktioniert dieses nicht!

Ich hoffe, dieses hilft Euch weiter. Bedanke mich im Vorraus!

von Karl heinz B. (kbucheg)


Lesenswert?

Wenn du ein Problem in deinem Code hast,
denkst du nicht, dass du uns deinen Code zeigen
solltest? Und zwar nicht nur in winzig kleinen
Ausschnitten, sondern so, dass man die Zusammenhänge
und Datentypen zumindest erkennen kann.

Ist das wirklich so schwer zu verstehen?

von Sven (Gast)


Lesenswert?

Jau, da hat Karl Heinz völlig recht. Ansich ist Dein Problem ganz 
schnell zu lösen. Aber so rein hypothetisch ohne konkrete Zeilen wirds 
schwer zu erklären...

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

In Zeile 42 fehlt ein volatile...

von Michael S. (mst)


Lesenswert?

...rufus hats anfangs weiter oben schon geschreiben:

> ptim->tm_sec = 0;
> ptim->tm_min = 36;

so würd ichs auch machen, und avr-gcc zumindest mag das auch so!

Selbst die ST docu beschreibt das auf Seite 7/9 in irgendeiner codezeile 
so:

> ptim->tm_year-=1900;

also eigentlich auch genau das gleich!

Ohne Problem-Code gehts ab hier nur schwer weiter...

Gruß Micha,

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.