Warum können wir keinen Wert zuweisen, wenn wir eine Struktur anstelle eines Zeigers auf eine Struktur zurückgeben?

WBOY
Freigeben: 2024-02-09 17:30:10
nach vorne
975 Leute haben es durchsucht

Warum können wir keinen Wert zuweisen, wenn wir eine Struktur anstelle eines Zeigers auf eine Struktur zurückgeben?

Wenn wir in der C-Sprache eine Struktur anstelle eines Zeigers auf die Struktur zurückgeben, liegt der Grund dafür, dass wir den Wert nicht direkt zuweisen können, darin, dass bei der Rückgabe der Struktur der Inhalt der gesamten Struktur kopiert wird, anstatt den zurückzugeben Zeiger auf den Strukturkörperzeiger. Da eine Struktur eine große Datenmenge enthalten kann, kann das Kopieren der gesamten Struktur teuer sein. Um die Effizienz zu verbessern, schreibt die C-Sprache daher vor, dass wir eine Struktur bei der Rückgabe nur verwenden können, indem wir sie einer Variablen vom Strukturtyp zuweisen. Dadurch können unnötige Kopiervorgänge vermieden und die Effizienz der Codeausführung verbessert werden.

Frageninhalt

Angenommen, wir haben die folgende Struktur

type profile struct {
    id   int
    name string
}

func test(p profile) profile {
    return p
}

func main() {
    var profile profile
    test(profile).id = 20 // cannot assign to test(profile).id (value of type int)
}
Nach dem Login kopieren

Aber wenn wir den Rückgabetyp der Funktion testen profile 更改为 *profile, funktioniert die Hauptfunktion.

func test(p Profile) *Profile {
    return &p
}

func main() {
    var profile Profile
    test(profile).id = 20 // Works
}
Nach dem Login kopieren

Warum passiert das?

Workaround

Das Zuweisen von Feldern zu Profile auf diese Weise hat keine spürbaren Auswirkungen. Sie weisen einen temporären Strukturwert (eines Felds) zu und verwerfen ihn dann sofort. Beachten Sie, dass der Rückgabewert des Tests eine Kopie des Profils in main ist; er wird in die Parameter des Tests kopiert und dann erneut kopiert, wenn Sie vom Test zurückkehren.

Wenn ein Zeiger zurückgegeben wird, ist die Struktur, auf die gezeigt wird, zumindest im Prinzip nach der Zuweisung immer noch zugänglich (allerdings nicht in diesem speziellen Fall, da der Zeiger auf eine Kopie des getesteten Arguments zeigt).

Das obige ist der detaillierte Inhalt vonWarum können wir keinen Wert zuweisen, wenn wir eine Struktur anstelle eines Zeigers auf eine Struktur zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage