Zeigerzuweisung in Go-Funktionen: Warum unterschiedliche Ergebnisse?
Bei der Übergabe eines Zeigers an eine Funktion in Go ist es wichtig zu verstehen, wie das funktioniert Welcher Zeiger verwendet wird und welche Auswirkungen er auf den ursprünglichen Wert hat. Diese Diskussion dreht sich um einen Codeausschnitt, der einen Zeiger auf eine Teststruktur übergibt, um deren Wertfeld zu ändern.
Der erste Codeausschnitt, obwohl versucht wird, das Wertfeld zu ändern, indem dem Zeiger eine neue Teststruktur zugewiesen wird (*p = Test{4}), kann den tatsächlichen Wert nicht ändern. Dies liegt daran, dass lediglich die Zeigervariable p und nicht der angezeigte Wert neu zugewiesen wird. Die p-Variable innerhalb der f()-Funktion existiert unabhängig und hat keinen Einfluss auf den Wert, auf den die p-Variable in main() zeigt.
Im Gegensatz dazu das zweite Codefragment, wo p.Value explizit auf 4 gesetzt ist, wird das Wertfeld erfolgreich geändert. Dies liegt daran, dass der -Operator den Zeiger dereferenziert und so den Zugriff und die Änderung des tatsächlichen Zeigerwerts ermöglicht.
Als zusätzlichen Hinweis ist es möglich, die in der Zeigervariablen der main()-Funktion gespeicherte Adresse durch Übergabe zu ändern seine Adresse (*) an die f()-Funktion. Dieser Ansatz ist jedoch weniger effizient und bequem im Vergleich zur direkten Änderung des angegebenen Werts mit p.Value.
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