Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa kita tidak boleh menetapkan nilai apabila kita mengembalikan struct dan bukannya penunjuk kepada struct?

Mengapa kita tidak boleh menetapkan nilai apabila kita mengembalikan struct dan bukannya penunjuk kepada struct?

WBOY
WBOYke hadapan
2024-02-09 17:30:10956semak imbas

Mengapa kita tidak boleh menetapkan nilai apabila kita mengembalikan struct dan bukannya penunjuk kepada struct?

Dalam bahasa C, apabila kita mengembalikan struktur dan bukannya penunjuk kepada struktur, sebab mengapa kita tidak boleh menetapkan nilai secara langsung ialah apabila mengembalikan struktur, kandungan keseluruhan struktur akan disalin dan bukannya mengembalikan penunjuk kepada struktur. Memandangkan struktur mungkin mengandungi sejumlah besar data, menyalin keseluruhan struktur mungkin mahal. Oleh itu, untuk meningkatkan kecekapan, bahasa C menetapkan bahawa apabila struktur dikembalikan, kita hanya boleh menggunakannya dengan memberikannya kepada pembolehubah jenis struktur. Ini boleh mengelakkan operasi penyalinan yang tidak perlu dan meningkatkan kecekapan pelaksanaan kod.

Kandungan soalan

Andaikan kita mempunyai struktur berikut

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

Tetapi jika kita menguji jenis pengembalian fungsi profile 更改为 *profile, fungsi utama akan berfungsi.

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

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

Kenapa ni?

Penyelesaian

Menetapkan medan kepada Profile dengan cara ini tidak mempunyai kesan yang ketara. Anda memperuntukkan nilai struct sementara (medan) dan kemudian segera membuangnya. Ambil perhatian bahawa nilai pulangan ujian ialah salinan profil dalam utama; ia disalin ke dalam parameter ujian, dan kemudian disalin semula apabila kembali daripada ujian.

Apabila mengembalikan penuding, sekurang-kurangnya pada dasarnya, struktur yang ditunjuk akan masih boleh diakses selepas tugasan (walaupun tidak dalam kes ini, kerana penunjuk menunjukkan salinan hujah yang sedang diuji).

Atas ialah kandungan terperinci Mengapa kita tidak boleh menetapkan nilai apabila kita mengembalikan struct dan bukannya penunjuk kepada struct?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam