Archiv verlassen und diese Seite im Standarddesign anzeigen : &* in C möglich?
TheRealTentacle
2005-11-18, 09:58:13
Mal eine Frage der anderen Art:
ist es bei Variablen die mit & übergeben wurden möglich diese in einer Funktion wieder einer anderen Funktion zu übergeben, und statt nur die Variable zu übergeben &* zu benutzen?
Die Frage ist ja, wird dann mit * nur der Wert betrachtet, oder der Inhalt der Variable.
Danke im Vorraus.
void a(int*z)
{
b(z) // hier stattdessen &*z
}
g(*z)
{}
Fruli-Tier
2005-11-18, 10:40:13
Also Referenz-Pointer Parameter gibt es, aber ich versteh nicht so ganz, worauf Du hinaus willst. Auch dein Beispiel ist nicht ganz logisch (oder ich blind).
AlSvartr
2005-11-18, 10:54:45
Also wenn ich mich nicht ganz arg irre, sollten sich doch bei einem b(&*z) & und * gegenseitig aufheben, da du den Pointer erst dereferenzierst, dann aber doch wieder den Pointer bildest, indem du die Adresse nimmst.
Fruli-Tier
2005-11-18, 11:03:52
Aber doch nicht in der Parameterliste. Dort gibst Du ja an, was für Variablentypen Du willst. Der Zugriff geschieht ja erst in der Funktion und da muss man dann auf die Operatorenreihenfolge achten, wenn man denn wirklich mal beide auf einmal verwendet (wobei ich da den Sinn nicht sehe ;) ).
Aber als Parameter ist das OK.
Beispiel:
Du übergibst ein Array an eine Funktion, stellst in der Funktion aber fest: Dat Ding is zu klein...
Machst dir also ein größeres Array und kopierst die originalen Daten darein, zerstörst den Speicherbereich des zu kleinen Arrays. Jetzt weist Du noch dem Parameter, den Du bekommen hast, den neuen Speicherbereich zu.
1. Möglichkeit
Wurde das Array als Pointer übergeben, so ändert sich die Adresse im aufrufenden Code nicht. Dort bekommt die Variable nicht mit, daß sich die Adresse geändert hat. Wie auch? Man gibt eine Adresse an eine Funktion und ändert innerhalb dieser Adresse die Daten, aber nicht die Adresse. Der Parameter in der Funktion enthält nur eine Kopie der originalen Adresse und liegt auch nur in der Funktion vor. Wenn er dort geändert wird, dann auch nur in der Funktion.
2. Möglichkeit
Das Array wird als Pointer-Referenz übergeben. Hier kann man auf den Speicherbereich zugreifen und da es auch eine Referenz ist, einen neuen Speicherbereich über den Parameter zurück geben. So erfährt dann auch der Aufrufende Code, daß sich der Ort des Arrays im Speicher geändert hat.
*edit*
Versucht bissle logischer zu formulieren
AlSvartr
2005-11-18, 14:15:53
Ich glaub ich hatte das einfach nich aufmerksam gelesen...sorry ;)
Außerdem bin ich verwirrt *ausklink* ;(
Fruli-Tier
2005-11-18, 14:18:05
Außerdem bin ich verwirrt *ausklink* ;(
Inwiefern? *ausklinkDingkaputtmach*
AlSvartr
2005-11-18, 14:36:41
Hat sich erledigt, ich habs jetzt auch kapiert :)
Fruli-Tier
2005-11-18, 15:59:33
Na wunnibar :)
Nur würde mich jetzt noch interessieren, was TheRealTentacle eigentlich wollte.
TheRealTentacle
2005-11-21, 14:41:19
Aber doch nicht in der Parameterliste. Dort gibst Du ja an, was für Variablentypen Du willst. Der Zugriff geschieht ja erst in der Funktion und da muss man dann auf die Operatorenreihenfolge achten, wenn man denn wirklich mal beide auf einmal verwendet (wobei ich da den Sinn nicht sehe ;) ).
Aber als Parameter ist das OK.
Der Sinn stand ja garnicht zur Frage :), es war nur Verständnishalber, weil ich mir jetzt besser vorstellen kann was das & und * bewirken.
Danke :)
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.