Rumah > pembangunan bahagian belakang > Golang > Penunjuk Pergi: Apakah Perbezaan Antara `&` dan `*` dan Bagaimana Ia Digunakan?

Penunjuk Pergi: Apakah Perbezaan Antara `&` dan `*` dan Bagaimana Ia Digunakan?

Mary-Kate Olsen
Lepaskan: 2024-11-30 18:40:11
asal
484 orang telah melayarinya

Go Pointers: What's the Difference Between `&` and `*` and How Are They Used?

& dan * Petunjuk: Perbezaan dan Penggunaan

Dalam Go, hujah fungsi boleh dihantar sama ada melalui nilai atau rujukan. Apabila melalui nilai, salinan pembolehubah dibuat dan dihantar ke fungsi. Apabila melalui rujukan, alamat pembolehubah dilalui sebaliknya, membenarkan fungsi mengubah suai nilai asal.

Konsep lulus melalui rujukan ini dicapai menggunakan penunjuk. Penunjuk ialah pembolehubah yang memegang alamat pembolehubah lain. Operator & mengembalikan alamat pembolehubah, manakala operator * digunakan untuk mengakses nilai yang disimpan pada alamat.

Menggunakan &

Operator & digunakan untuk menghantar pembolehubah melalui rujukan sebagai hujah fungsi. Sebagai contoh, pertimbangkan fungsi berikut:

func SendNotification(user *User) {
    // ...
}
Salin selepas log masuk

Fungsi ini menjangkakan *Pengguna sebagai hujah, dengan * menunjukkan bahawa hujah ialah penunjuk kepada struct Pengguna. Untuk menghantar pembolehubah u jenis Pengguna, anda perlu menggunakan operator & seperti:

SendNotification(&u)
Salin selepas log masuk

Ini menghantar alamat u kepada fungsi, membenarkan ia mengubah suai nilai asal.

Menggunakan *

Pengendali * digunakan untuk mengakses nilai yang disimpan di alamat. Contohnya, diberi kod berikut:

var userPtr *User
userPtr = &u
Salin selepas log masuk

userPtr ialah penunjuk yang menyimpan alamat struct Pengguna yang disimpan dalam u. Untuk mengakses nilai yang disimpan di alamat ini, kita boleh menggunakan operator *:

*userPtr = User{name: "John"}
Salin selepas log masuk

Ini memberikan nilai baharu kepada struct Pengguna di alamat yang disimpan dalam userPtr.

Perbezaan dan Penggunaan

Perbezaan antara & dan * terletak pada fungsinya. & digunakan untuk mendapatkan alamat pembolehubah, membenarkan ia diluluskan melalui rujukan. * digunakan untuk mengakses nilai yang disimpan pada alamat, membenarkan pengubahsuaian kepada nilai asal.

Dalam amalan, & biasanya digunakan untuk menghantar pembolehubah dengan merujuk kepada fungsi, manakala * digunakan untuk mengubah suai nilai yang disimpan pada alamat, seperti apabila menggunakan penunjuk sebagai penerima dalam kaedah.

Contoh Penggunaan

Pertimbangkan perkara berikut kod:

func main() {
    u := User{name: "Jane"}

    SendNotification(&u) // Passing by reference

    fmt.Println(u.name) // Prints "Jane"
}
Salin selepas log masuk

Di sini, fungsi SendNotification mengambil *Pengguna sebagai hujah. Dengan melepasi &u, kami membenarkan fungsi mengubah suai nilai asal u. Di dalam fungsi, nilai boleh diubah suai seperti ini:

func SendNotification(user *User) {
    user.name = "John"
}
Salin selepas log masuk

Ini akan menukar nama struct Pengguna yang diluluskan melalui rujukan.

Atas ialah kandungan terperinci Penunjuk Pergi: Apakah Perbezaan Antara `&` dan `*` dan Bagaimana Ia Digunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan