3.7ゴーポインタ

1.ポインタ

実行時に、各変数がアドレスを有し、アドレスがメモリ内の可変位置を表します。

使用言語行く&変数「フェッチアドレス」操作の前に置かれた変数のシンボルのために。

1.指针默认值nil
2.通过&(取地值符)取变量地址
3.通过*(取值符)透过指针访问目标值

フォーマット:

age := 18
ptr:=&age  //age是变量名,&age是取age的内存地址,地址交给ptr变量接收,ptr类型是*int

まず、などの基本データ型、name="yugo" 変数name格納された値yugo

1)基本データ型、变量記憶されていると呼ばれるタイプ

2)&シンボル獲得变量地址、例えば&name

3)指针类型変数、別の変数に格納され内存地址、この地址点は空間に格納されます。

4)取得指针类型ポイントを使用して、*例えば*ptr、値を得るために*のPTRを使用するPTRによって指さ

package main

import (
    "fmt"
)

func main() {
    var name string = "yugo"
    //查看name变量的内存地址,通过&name取地址
    fmt.Printf("name的内存地址:%v\n", &name)

    //指针变量,存的是内存地址
    //ptr指针变量指向变量name的内存地址
    var ptr *string = &name
    fmt.Printf("指针变量ptr的内存地址:%v\n", ptr)

    //获取指针变量的值,用*ptr
    //*ptr表示读取指针指向变量的值
    fmt.Printf("指针变量ptr指向的值是:%v\n", *ptr)
}

5)値型(整数、フロート、ブール、文字列、アレイ、構造体)は、対応するポインタ型を有します

例えば、*intおよび*stringように

値6)ポインタ型変数交換

//想要交换ab的值
func exchange(a, b *int) {
    *a, *b = *b, *a
}

func main() {
    a, b := 3, 4
    exchange(&a, &b)
    fmt.Println(a, b)
}

7)新しい()関数を使用してポインタを作成します

func main() {
    s1 := new(string)                                  //new函数返回指针类型*string,用s1指针变量存储
    fmt.Printf("s1类型:%T  s1指针变量存储的内存地址是:%v\n", s1, s1) //s1类型*string,值是空字符串的内存地址
    //s1="哈哈" 错误写法,s1存储的内存地址
    *s1 = "马云说我不爱钱" //*s1取内存地址指向的值
    fmt.Println(*s1)
}

おすすめ

転載: www.cnblogs.com/open-yang/p/11256771.html
おすすめ