mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C Problem --> Struktur und Pointer


Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgende Deklaration einer Struktur in C:
---------------------------------------
struct TCB {
  long *DI;
  long DX;                          long DY;
  long DP;
};

TCB TCB_source, TCB_destin;
----------------------------------------

Ich möchte jetzt ganz gerne den Wert von DI in der Strukur ändern bzw. 
zuweisen.

Wieso kann ich nicht mit

TCB_source.DI = 100;

das machen?

Vielen DANK.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil 100 kein Zeiger ist sondern eine Zahl.

Autor: OliverSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder
struct TCB {
  long *DI;
  long DX;                          long DY;
  long DP;
};

struct TCB TCB_source, TCB_destin;

oder
struct TCB {
  long *DI;
  long DX;                          long DY;
  long DP;
} TCB_source, TCB_destin;

oder
typedef struct{
  long *DI;
  long DX;                          long DY;
  long DP;
} TCB;

TCB TCB_source, TCB_destin;

Dann bekommst du noch eine Warnung, wei du einem Pointer einen Integer 
zuweist, aber das willst du ja wohl auch, oder?

Oliver

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OliverSo wrote:
> Dann bekommst du noch eine Warnung, wei du einem Pointer einen Integer
> zuweist, aber das willst du ja wohl auch, oder?
Nun, wenn man es sauber machen will, dann castet man den Integer einfach 
in einen Pointer auf long und die Warnung verschwindet auch noch...
TCB_source.DI = (long*) 100;
...müsste das Vorgesehene machen...

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, Sven sollte eine gute Seite Lehrbuch ueber Pointer lesen.

Der Vorschlag "TCB_source.DI = (long*) 100;" ist vielleicht das was Sven 
braucht, vielleicht aber auch nicht.  Falls die Struktur bereits gueltig 
initialisiert war, braucht Sven vielleicht "*(TCB_source.DI) = 100;"

Das haengt leider von Details ab, die wir hier nicht kennen.  Deshalb 
Sven, lies was ueber Pointer!

Gruss,
Marc

Autor: OliverSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>TCB_source.DI = (long*) 100;
>...müsste das Vorgesehene machen...

Das ist zwar syntaktisch richtig, aber ob das das "Vorgesehene" ist?

Oliver

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.