www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Zeigern


Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: macke_a (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Zeile 42 fehlt ein volatile...

Autor: Michael S. (mst)
Datum:

Bewertung
0 lesenswert
nicht 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,

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.