Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Tugasan Penunjuk dalam Fungsi Go Kadangkala Tidak Menjejaskan Nilai Asal?

Mengapa Tugasan Penunjuk dalam Fungsi Go Kadangkala Tidak Menjejaskan Nilai Asal?

DDD
DDDasal
2024-10-28 01:38:02148semak imbas

Why Does Pointer Assignment in Go Functions Sometimes Not Affect the Original Value?

Tugasan Penunjuk dalam Fungsi Go: Mengapa Hasil Berbeza?

Apabila menghantar penuding kepada fungsi dalam Go, adalah penting untuk memahami cara penunjuk digunakan dan implikasinya terhadap nilai asal. Perbincangan ini berkisar pada coretan kod yang menghantar penuding kepada Ujian struct, berhasrat untuk mengubah suai medan Nilainya.

Coretan kod pertama, walaupun cuba menukar medan Nilai dengan memberikan struct Ujian baharu kepada penuding (*p = Ujian{4}), gagal mengubah nilai sebenar. Ini kerana ia hanya menetapkan semula pembolehubah penunjuk p, bukan nilai yang ditunjuk. Pembolehubah p dalam fungsi f() wujud secara bebas dan tidak mempunyai kesan ke atas nilai yang ditunjukkan oleh pembolehubah p dalam main().

Sebaliknya, coretan kod kedua, dengan Nilai p. ditetapkan secara eksplisit kepada 4, berjaya mengubah suai medan Nilai. Ini kerana pengendali menyahrujuk penuding, membenarkan akses dan pengubahsuaian nilai titik sebenar.

Sebagai nota tambahan, adalah mungkin untuk mengubah suai alamat yang disimpan dalam pembolehubah penunjuk fungsi main() dengan menghantar alamatnya (*) kepada fungsi f(). Walau bagaimanapun, pendekatan ini kurang cekap dan mudah berbanding dengan mengubah suai secara langsung nilai runcing menggunakan Nilai p.

Atas ialah kandungan terperinci Mengapa Tugasan Penunjuk dalam Fungsi Go Kadangkala Tidak Menjejaskan Nilai Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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