Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?

Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?

藏色散人
藏色散人ke hadapan
2021-09-17 16:28:322262semak imbas

Artikel ini diperkenalkan oleh ruangan tutorial go language untuk memperkenalkan 11 mata pengetahuan Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai? Pointer Saya harap ia akan membantu rakan yang memerlukan.

Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?

Penunjuk ialah salah satu bahagian terpenting dalam menulis kod yang baik. Dalam artikel ini, kami akan meneroka apakah petunjuk itu dan cara menggunakannya dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?.

1.

Penunjuk ialah pembolehubah yang menyimpan alamat yang ditunjukkannya. Penunjuk jenis tertentu hanya boleh menunjuk kepada jenis itu (jenis data tidak boleh diubah).

2. Sintaks penunjuk Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?Lang

Sintaks penunjuk adalah sangat mudah. Berikut ialah sintaks untuk pengisytiharan penunjuk dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?. Nilai sifar bagi penuding

var ptr *typevar ptrint *int     // 指向 int 的指针

ialah nihil.

3 Permulaan penunjuk dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?

penunjuk dimulakan menggunakan &:

package mainimport (
    "fmt")func main() {
    var q int = 42
    var p *int     // declare the pointer
    p = &q         // initialize the pointer
    fmt.Println(p)  // 0x40e020}

4. Nilai penunjuk Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?

Nilai penunjuk bermaksud mendapatkan nilai dalam alamat yang disimpan oleh penuding. Berikut ialah contoh menggunakan operator * untuk melaksanakan operasi nilai penunjuk:

package mainimport (
    "fmt")func main() {
    var q int = 42
    var p *int
    p = &q
    fmt.Println(p)  // 0x40e020
    fmt.Println(*p) // 42}

5. Penunjuk penunjuk dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?Lang Alamat penuding

ialah nilai angka , nilai ini juga boleh diberikan kepada pembolehubah lain. Oleh itu, kita boleh mencipta tahap tidak arah. Tahap kelalaian ini kadangkala boleh menimbulkan kekeliruan yang tidak perlu, jadi gunakannya dengan berhati-hati.

package mainimport (
    "fmt")func main() {   
    i := 64
    j := &i  // j 是 int 类型的指针
    k := &j  // k 是存放指针地址的指针,也是 int 类型

    fmt.Println(i)  // 64

    fmt.Println(j)  // 0x40e020 

    fmt.Println(*j) // 64 (value inside that address)

    fmt.Println(k)  // 0x40c138

    fmt.Println(*k) // 0x40e020 (address of j)}

6. Penunjuk kepada antara muka

Penunjuk boleh menunjuk kepada apa sahaja, malah kepada antara muka. Apabila menggunakan antara muka kosong, nilai yang dikembalikan ialah nil.

package mainimport (
    "fmt")func main() {   
    var a interface{}
    b := &a
    fmt.Println(b)    // 0x40c138
    fmt.Println(*b)   // <nil>}</nil>

Berikut ialah contoh penggunaan antara muka dengan penunjuk.

package mainimport (
    "fmt")// 定义接口type Bird interface{
    fly()}type B struct{
    name string}// 实现它func (b B)fly() {
    fmt.Println("Flying...")}func main() {   
    var a Bird = B{"Peacock"}
    b := &a
    fmt.Println(b)    // 0x40c138
    fmt.Println(*b)   // {Peacock}}

Di sini "a" ialah struct jenis Burung yang kemudiannya digunakan untuk jenis antara muka seperti yang anda lihat. Ini adalah penggunaan polimorfisme. Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai? membolehkan polimorfisme menggunakan antara muka Jadi anda boleh melihat bahawa penunjuk kepada struktur atau antara muka ialah alat penting dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?.

7 Penunjuk sebagai parameter fungsi

Penunjuk boleh digunakan sebagai parameter dalam fungsi. Ia mempunyai beberapa kelebihan berbanding menggunakan nilai secara langsung. Menggunakan penunjuk sebagai hujah ialah cara yang sangat berkesan untuk menghantar objek besar kepada fungsi. Jadi menggunakannya adalah pengoptimuman yang besar.

Menggunakan objek besar boleh melambatkan masa pelaksanaan, ini adalah contoh menghantar penunjuk kepada struktur. Ini adalah cara yang cekap untuk mengendalikan objek besar.
package mainimport (
    "fmt")//声明指针参数func f(a *int) {
    fmt.Println(*a)}func main() {   
    var a int = 42

    // 传递地址
    f(&a) // 42}

Berhati-hati apabila menafikan struktur. Jika anda menggunakannya seperti
package mainimport (
    "fmt")type Human struct {
    name string
    age int
    place string}func f(h *Human) {
    fmt.Println("The user", (*h).name, "is", (*h).age, "years old and he is from", (*h).place)}func main() {   
    john := Human{"John", 36, "Las Vegas"}

    f(&john) // The user John is 36 years old and he is from Las Vegas}
maka ia akan menimbulkan ralat.

Kaedah *structname.field1 yang betul ialah . (*structname).field1Menggunakan penunjuk di dalam fungsi menjadikan nilai "

boleh berubah

" melainkan parameternya adalah const, jadi apabila kita ingin menukar nilai, kita harus menggunakan penunjuk ke penunjuk nilai itu sebagai fungsi parameter, dan kemudian buat pengubahsuaian yang diperlukan.

8 Fungsi "baharu" dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?Fungsi

baharu

dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai? mengembalikan penunjuk kepada jenis.

package mainimport (
    "fmt")func main() {   
    ptri := new(int)
    *ptri = 67

    fmt.Println(ptri)  // 0x40e020
    fmt.Println(*ptri) // 67}

9. Mengembalikan penunjuk daripada fungsi Sebarang jenis penunjuk boleh dikembalikan daripada fungsi seperti nilai lain. Ia sangat mudah. Kami tidak mengembalikan nilai secara langsung, tetapi alamat nilai tersebut.

package mainimport (
    "fmt")func p() *int {  // 将返回类型指定为指针
    v := 101

    // 返回地址
    return &v}func main() {   
    n := p()
    fmt.Println(n)  // 0x40e020
    fmt.Println(*n) // 101}

10. Penunjuk kepada fungsi Penunjuk kepada fungsi berfungsi secara tersirat dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?. Ini bermakna kita tidak perlu mengisytiharkannya sebagai penunjuk.

package mainimport (
    "fmt")func main() {       
    f := func() {
        fmt.Println("a function")   
    }
    pf := f    pf() // 一个函数}

11. Perkara yang perlu diingat apabila menggunakan penunjuk dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai? Aritmetik penunjuk tidak dibenarkan dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?. Oleh itu, kami tidak boleh melakukan operasi seperti kenaikan atau penurunan yang sama seperti yang kami boleh dalam C/C.

Kita mungkin mahu menggunakan penuding pada tatasusunan, tetapi menggunakan kepingan ialah pilihan yang lebih baik. Slices jauh lebih serba boleh daripada penunjuk kepada tatasusunan. Kod ini sangat ringkas dan memudahkan kerja kami. Oleh itu, gunakan kepingan apabila boleh.


Alamat asal: https://golangdocs.com/pointers-in-golang

Alamat terjemahan: https://learnku.com/go/t/60880

Atas ialah kandungan terperinci Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam