English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎チュートリアル

Golang 制御文

Golang 関数 & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang 異常(Error)

Golang その他の雑多

Go 言語のポインタを関数の引数として

Goプログラミング言語のポインタは、他の変数のメモリアドレスを格納するための変数です。また、変数関数にポインタを渡す方法は2種類あります:

  • ポインタを作成し、それを関数に渡します

  • 変数のメモリアドレスを渡します

を用いてポインタを作成し、それを関数に渡します

以下のプログラムでは、関数ptf、この関数は整数型ポインタの引数を持っており、この関数はポインタ型の引数のみを受け入れることを示しています。また、この関数は変数を変更しますxの値。最初は、x値を含む100。しかし関数呼び出しの後、値が変更されます748、出力によると、

// Goプログラムはポインタを作成します
//それを関数に渡します
package main
import "fmt"
//ポインタを引数として受け入れ
func ptf(a *int) {
    //ポインタの解引用
    *a = 748
}
func main() {
    //通常の変数
    var x = 100
    fmt.Printf("関数呼び出し前のxの値は:%d\n", x)
    //ポインタ変数を取得します
    //アドレスを割り当てます
    var pa *int = &x
    //以下のように関数を呼び出します
    //ポインタを関数に渡します
    ptf(pa)
    fmt.Printf("関数呼び出し後のxの値は:%d\n", x)
}

出力:

関数呼び出し前のxの値は: 100
関数呼び出し後のxの値は: 748

変数のアドレスを関数呼び出しに渡します

以下のプログラムを考えてみましょう、私たちはポインタを作成して変数を保存していません。xのアドレス、すなわち上記のプログラムのpa。私たちは直接、xのアドレスを関数呼び出しに渡し、その呼び出しは上記の方法に似ています。

package main
import "fmt"
// int型ポインタを引数として
func ptf(a *int) {
    *a = 748
}
func main() {
    var x = 100
    fmt.Printf("関数呼び出し前のxの値は:%d\n", x)
    //関数を呼び出すことで
    //アドレスを渡します
    //変数x
    ptf(&x)
    fmt.Printf("関数呼び出し後のxの値は:%d\n", x)
}

出力:

関数呼び出し前のxの値は: 100
関数呼び出し後のxの値は: 748

注意:上記のプログラムでは、短い宣言演算子(:=)を使用して変数とポインタを宣言することもできます。