Golangポインタの理解

そして、ポインタ型ポインタアドレスは0x00

変数に対応する変数は、メモリの種類に対応する値を保持するポインタ値が別の変数のアドレスであり、変数ポインタは、任意の値のメモリアドレスを指してもよいです。

シンボルが取らアドレス&
ポインタ型加える前に*番号を、コンテンツ間接参照と呼ばれる値を使用してポインタを参照し、変更の種類である、ポインタポイントを取得してもよいです。

prt := &v    // v 的类型为T

v変数のアドレス、表現するものと解釈されるprt受信vアドレス、prtタイプ*Tとして知られている、Tポインタ型。

ポインタからポインタ値を取得しますが0x01

使用して&、以下の変数がポインタ変数を取得するためのアドレスを取る、あなたはポインタを使用することができ*ポインタ番号の値を取得するためにポインタ値と呼ばれています。

temp := "test content"
prt := &temp
fmt.Println(*prt)   // 打印 test content

次のように変数、特性およびアドレスポインタの関係は、ポインタ変数は、アドレスを取って、値です。

変数(&)動作に対処するために取らポインタ変数にこの変数を得ることができます。
ポインタ変数の値はポインタアドレスです。
ポインタ変数の値(*)は、元の変数の操作の値は、ポインタ変数のポイントを得ることができます。

ポインタの修正値が0x02

使用*修正された値とポインタの動作

x, y := 1, 2
fmt.Println(x, y)  // 1 2
j, k := &x, &y
*j, *k = *k, *j
fmt.Println(x, y)  // 2 1

*基本的な演算子は、変数のポインタを操作しています。右の動作値は、変数のポイント値をとるときである。左で動作しているときの値、値を変数のポイントに設定されています。

あなただけのポインタ参照が交換された場合は、値とアドレスが、変数には影響はポインタのみのアプリケーションに影響を与える、参照されていないされています。

x, y := 1, 2
fmt.Println(x, y)  // 1 2
j, k := &x, &y
j, k = k, j
fmt.Println(x, y)    // 1 2
fmt.Printf("x : %p, y :  %p \n", &x, &y)  // x : 0xc00001a088, y :  0xc00001a090
fmt.Printf("j : %p, y :  %p \n", j, k)  //j : 0xc00001a090, y :  0xc00001a088

X、Y値とをアドレスポインタj、切り替え後のk、jは影響しない、k値を交換しました。

0x03のリターン機能ローカル変数

囲碁の言語では、関数を使用すると、ローカル変数のアドレスが返された後、関数fがまだ有効で呼び出すと、ポインタがまだこの変数pを参照しているため、例えば、次のコードは、ローカル変数vを作成するために、ローカル変数のアドレスが安全で返します

var p = f()

func f() *int {
    v := 1
    return &v
}

0x04を使い、ポインタを作成する)(新

    temp := new(int)
    *temp = 123
    fmt.Println(*temp)  // 123
    fmt.Println(temp)  //  0xaabb

0x05のフラグ技術パケットポインタ

ポインタは、コマンドラインの解析フラグを実装するために使用される標準ライブラリパッケージフラグ、の重要な技術です。
例:

package main

import (
    "flag"
    "fmt"
    "strings"
)

var n = flag.Bool("n", true, "print test")
var sep = flag.String("s", " ", "separator")
var test = flag.String("test", " ", "测试")

func main() {
    flag.Parse()
    fmt.Println(strings.Join(flag.Args(), *sep))
    if *n {
        fmt.Println(*test)
    }
}

ラン

$ go run main.go --help
Usage of /var/exe/main:
  -n    print test
  -s string
        separator (default " ")
  -test string
        测试 (default " ")
exit status 2
$ go run main.go -s "+"  --test 测试文本 a bc def 123
a+bc+def+123
$ go run main.go -s "+" -n --test 测试文本 a bc def 123
a+bc+def+123
测试文本

おすすめ

転載: www.cnblogs.com/nnylee/p/11512487.html
おすすめ