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

WBOY
Lepaskan: 2024-02-09 17:30:10
ke hadapan
938 orang telah melayarinya

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)
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!