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


von Sven Scholz (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Weil 100 kein Zeiger ist sondern eine Zahl.

von OliverSo (Gast)


Lesenswert?

Entweder
1
struct TCB {
2
  long *DI;
3
  long DX;                          long DY;
4
  long DP;
5
};
6
7
struct TCB TCB_source, TCB_destin;

oder
1
struct TCB {
2
  long *DI;
3
  long DX;                          long DY;
4
  long DP;
5
} TCB_source, TCB_destin;

oder
1
typedef struct{
2
  long *DI;
3
  long DX;                          long DY;
4
  long DP;
5
} TCB;
6
7
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

von Johannes M. (johnny-m)


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...
1
TCB_source.DI = (long*) 100;
...müsste das Vorgesehene machen...

von Marc (Gast)


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

von OliverSo (Gast)


Lesenswert?

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

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

Oliver

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.