Typen umcasten bei Adressen

Hallo,

bekanntlich kann man mittels
(neuer typ) variable

den Typen der variable umcasten.

Aber:
Was mache ich bei Adressen?

Beispiel:
int myfunc(short i, long* n)
erwartet als 2. Parameter einen pointer auf eine long-variable.

Angenommen, ich habe nur eine short-variable und möchte diese nun in einen pointer auf long umcasten, um die Funktion aufrufen zu können, was muss ich da machen?

Danke für jeden Hinweis,
Crypto.

Hallo Crypto !

Wenn die Funktion einen Pointer auf eine long-Variable erwartet solltest du ihr auch einen solchen liefern (was ist so schwer daran eine lokale long-Variable zu deklarieren und ihr den Inhalt deiner short-Variablen zuzuweisen).
Wenn du sie nur umcastest hängt es von den Werten der der Variablen folgenden Speicherstellen ab welche Werte die Funktion erhält (sie liest ja einen Speicher der Grösse einer long-Variable aus).
Und was noch schlimmer ist: Wenn die Funktion einen neuen Wert in die (vermeintliche) long-Variable schreibt werden die nachfolgenden Speicherstellen überschrieben (sie beschreibt ja einen Speicher der Grösse einer long-Variable), die Folgen können (auch von Aufruf zu Aufruf) sehr unterschiedlich sein: von keinem Effekt bis zu komplettem Systemabsturz!
Beim Umcasten muss man also sehr vorsichtig sein und wissen was man tut! Besonders Pointer auf Variablen sind sehr kritisch weil ja die Information über die Speichergrösse geändert wird.
Schon beim casten von direkten Variablen muss man aufpassen:
unsigned int gegen int funktioniert einwandfrei - solange sich die Werte der Variablen zwischen 0 und max. positiven Wert von signed befinden, in allen anderen Fällen geht was schief, detto funktioniert z.B. long auf short zu casten - solange der Wert in der long-Variablen nicht grösser als der maximale Wert der short-Variablen ist, u.s.w.

mfg
Christof