Wandlung von Integer aus einem pointer

Martin2XK

Level-2
Beiträge
116
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich untersuche eine Funktion, welche einen Wert eines Pointers jeweils um 1 erhöht, wenn eine bestimmte Bedingung zutrifft. Es funktioniert, und eigentlich müsste ich an der Funktion nichts ändern, das mache ich auch nur ungern. Nach dem Kompilieren erhalte ich eine Warnung, welche auf eine Zeile verweist in der diese Funktion programmiert ist. Ich fasse den Inhalt kurz zusammen:

UDINT *pointerVar1;
UDINT Var2;
UDINT *Var3;
UDINT Laufvariable

Var2 = pointerVar1;


for x do something ...

Var3 = (Var2 + Laufvariable);


Ich vermute, dass es mit dem * zusammenhängt. Welche Bedeutung hat dieses Zeichen und warum funktioniert es auch ohne ... geschrieben ist der Code in C

Es heisst: assignment makes Int from pointer without a cast
 
Zuletzt bearbeitet:
Also ja... das klappt. Danke! Aber meine Frage war:

Welche Bedeutung hat dieses Zeichen und warum funktioniert es auch ohne

Edit: ich schaue mir das Video an
 
Zuletzt bearbeitet:
https://www.google.com/search?q=c+*+pointer

Das Zeichen bedeutet bei der Deklaration, dass es sich nicht um eine Variable des Datentyps handelt, sondern um einen Pointer auf eine Variable des Datentyps. Die Variable wird also eine Adresse enthalten und keinen Wert des Datentyps.

Bei der Verwendung im Code dereferenziert der * die Adresse. In deinem Fall ist Var3 keine UDINT-Variable, sondern ein Pointer auf UDINT-Variablen. Var3 = (Var2 + Laufvariable); sollte so unzulässig oder zumindest logisch falsch sein, weil da ja ein UDINT-Wert an einen Pointer zgewiesen wird. *Var3 = (Var2 + Laufvariable); bedeutet, dass an die Adresse, auf die Var3 zeigt, das UDINT-Ergebnis der Berechnung zugewiesen wird. Es muss zuerst sichergestellt werden, dass in Var3 eine Adresse enthalten ist, z.B. Var3 = &myUDINTvar;
Var2 = pointerVar1; sollte ebenso unzulässig sein, weil pointerVar1 keinen UDINT enthält,sondern deklarationsgemäß eine Adresse.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe den Zusammenhang, es ist unlogisch. Aber warum erhalte ich keinen Fehler sondern nur eine Warnung? Es scheint, auf den ersten Blick, auch alles zu funktionieren.
 
Zurück
Oben