【Golang】指针

【Go语言】指针

我已经完成了学习基础到创建Web应用程序的过程,现在我将进行复习并总结。从基础到应用都包括在内。

package main
//ポインタ
//& アドレス
//*  アドレスの実態
//*int ポインタ型 この中にはアドレスを入れる
//関数で変数の値を変えたい場合は、関数の引数はポインタ型(メモリーのアドレス)を受け取るようにする。

import (
    "fmt"
)


func double(i int){
    i = i * 2
}

//ポインタ型を引数
func double2(i *int){
    *i = *i * 2
}

func main() {
    var n int = 100

    fmt.Println(n)
    //>>100

    fmt.Println(&n)
    //メモリのアドレスを表示
    //>>0xc000136008

    //2倍にする関数
    double(n)
    fmt.Println(n)
    //値渡しされる為、変わらない
    //>>100


    //ポインタ型
    //メモリーのアドレスの事
    //nのアドレスをpに定義(nを参照している)
    //&を使って任意の型から、そのポインタ型を生成できる。
    //&はアドレス演算子と呼ばれる。
    var p *int = &n

    //アドレスのアドレス?
    fmt.Println(&p)

    //メモリーを表示
    fmt.Println(p)
    //>>0xc000136008

    //メモリーの中身を表示
    fmt.Println(*p)
    //>>100

    //ポインタ型を引数に受けとるので、アドレスを渡す
    //double2(n)はnがポインタ型でないので、エラー
    double2(&n)
    //デリファレンス
    //参照渡しになるので変化する。
    fmt.Println(n)
    //>>200

    //nの参照のpなので400になる。
    double2(p)
    fmt.Println(*p)
    //>>400

    //こんなこともできる
    //nのアドレス
    fmt.Println(&n)
    //nのアドレスの実態
    fmt.Println(*&n)
    //nのアドレスの実態のアドレス
    fmt.Println(&*&n)



}
广告
将在 10 秒后关闭
bannerAds