Heim  >  Artikel  >  Backend-Entwicklung  >  Warum können wir keinen Wert zuweisen, wenn wir eine Struktur anstelle eines Zeigers auf eine Struktur zurückgeben?

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

WBOY
WBOYnach vorne
2024-02-09 17:30:10917Durchsuche

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)
}

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
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen