Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Nilai yang manakah mempunyai semantik penunjuk?

Nilai yang manakah mempunyai semantik penunjuk?

WBOY
WBOYke hadapan
2024-02-10 21:30:12457semak imbas

Nilai yang manakah mempunyai semantik penunjuk?

editor php Banana akan menjawab soalan biasa untuk anda dalam artikel ini: "Nilai yang manakah mempunyai semantik penunjuk Dalam PHP, terdapat beberapa jenis nilai tertentu yang mempunyai semantik penunjuk, yang bermaksud bahawa ia adalah?" dalam ingatan Dikendalikan secara berbeza daripada jenis nilai lain. Secara khusus, tatasusunan dan objek ialah nilai dengan semantik penunjuk. Apabila kita menetapkan tatasusunan atau objek kepada pembolehubah lain, kita sebenarnya menyalin penunjuk ke tatasusunan asal atau objek kepada pembolehubah baharu. Ini bermakna sebarang pengubahsuaian kepada pembolehubah baharu akan menjejaskan tatasusunan atau objek asal. Untuk jenis nilai lain, seperti integer, nombor titik terapung dan rentetan, operasi tugasan sebenarnya menyalin nilai asal kepada pembolehubah baharu dan bukannya menyalin penuding. Oleh itu, pengubahsuaian kepada pembolehubah baharu tidak akan menjejaskan nilai asal. Ini adalah konsep nilai dalam PHP yang mempunyai semantik penunjuk.

Kandungan soalan

Dalam Go, semuanya dilalui oleh nilai. Memanggil fungsi dengan nilai menyebabkan nilai disalin, dan fungsi hanya mengakses salinan nilai.

Semantik penunjuk membenarkan menghantar sesuatu "mengikut nilai" untuk mengemas kini nilai "asal", sama seperti kita menghantar penunjuk kepadanya.

Jenis yang manakah mempunyai semantik penunjuk?

Penyelesaian

Jika anda ingin mengubah suai nilai yang dihantar kepada fungsi, semua jenis pembolehubah memerlukan penggunaan penunjuk.

Satu-satunya pengecualian ialah sesetengah jenis rujukan boleh mengubah suai ahli mereka tanpa menghantar penunjuk, tetapi nilai jenis tidak boleh diubah suai tanpa menggunakan penunjuk.

Contoh (taman permainan) mengubah suai ahli kepingan (tetapi bukan kepingan itu sendiri):

func main() {
    s := []int{1, 2, 3, 4}
    modifyslicemember(s)
    fmt.println(s) // [90 2 3 4]
}

func modifyslicemember(s []int) {
    if len(s) > 0 {
        s[0] = 99
    }
}

Untuk mengubah suai kepingan itu sendiri (taman permainan):

func main() {
    s := []int{1, 2, 3, 4}
    modifySlice(&s)
    fmt.Println(s) // []
}

func modifySlice(s *[]int) {
    *s = make([]int, 0)
}

Walau bagaimanapun, sila ambil perhatian bahawa walaupun dalam kes ini, secara tegasnya kami tidak benar-benar mengubah nilai yang diluluskan. Dalam kes ini, nilai yang diluluskan ialah penunjuk , dan penunjuk itu tidak boleh ditukar .

Atas ialah kandungan terperinci Nilai yang manakah mempunyai semantik penunjuk?. 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