Durch die Übergabe von Zeigern an Funktionen können die Werte geändert werden, auf die sie verweisen. Allerdings ist es erforderlich, das Innenleben von Zeigern zu verstehen, um diese Operation korrekt auszuführen.
Um einen Wert zu ändern, auf den ein Zeiger zeigt, ist es wichtig, den Zeiger zu dereferenzieren. In Go wird zu diesem Zweck der Sternchenoperator (*) verwendet. Indem Sie einen Zeiger dereferenzieren, können Sie auf den zugrunde liegenden Wert zugreifen, auf den er zeigt.
Der Hauptunterschied besteht zwischen der Änderung des Werts eines Zeigers und der Änderung seines Wertes weist darauf hin. Wenn Sie einer Zeigervariablen einen neuen Wert zuweisen, ändert sich nur die darin gespeicherte Adresse. Der folgende Codeausschnitt ändert beispielsweise nicht den Wert, auf den verwiesen wird:
func f(p *Test) {
p = &Test{4}
}
Um den Wert, auf den verwiesen wird, zu ändern, muss der Dereferenzierungsoperator verwendet werden. Dies kann explizit oder implizit erfolgen.
Explizite Dereferenzierung:
func f(p *Test) {
*p = Test{4}
}
Implizite Dereferenzierung:
func f(p *Test) {
p.Value = 4
}
In beiden Fällen wird der Wert, auf den p zeigt, geändert.
Die Übergabe eines Zeigers an einen Zeiger (*Test) ermöglicht die Änderung des Zeigerwert, der in der Hauptfunktion gespeichert ist. Der Wert, auf den der ursprüngliche Zeiger zeigt, wird jedoch nicht geändert.
func f(p **Test) {
*p = &Test{4}
}
Zusammenfassend lässt sich sagen, dass es bei der Übergabe von Zeigern an Funktionen wichtig ist, den Unterschied zwischen der Änderung des Werts eines Zeigers und der Änderung des Werts, auf den er zeigt, zu verstehen. Die Dereferenzierung von Zeigern ist für die Durchführung des letztgenannten Vorgangs unerlässlich und ermöglicht Änderungen an den zugrunde liegenden Datenwerten.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3