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.
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?
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!