Go は、ポインターをサポートするプログラミング言語です。多くの操作ではメモリ アドレスの直接操作が必要となるため、ポインタは Go プログラミングで広く使用されています。ポインターの正しい使用方法を学ぶと、コードの効率が向上し、特定のシナリオでの問題の解決に役立ちます。
ポインタは、アドレスを格納する特別な変数です。このアドレスは、メモリに格納されている別の変数のアドレスを指します。言い換えれば、ポインタは変数のメモリ アドレスです。
例:
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>var a int = 10 var p *int = &amp;a</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div>ここで、a
は整数値 10
を格納しますが、p
は ## A ポインターです#int 型の変数には、
a のメモリ アドレスが格納されます。
&a が
a のアドレスを取り出して
p に格納すると、
a が格納したアドレスに
p# 経由でアクセスできます。 ## 価値。 ポインターの操作
ポインター アドレスの取得
&
を追加すると、変数のポインター アドレスを取得できます。変数の前に。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>var a int = 10
var p *int = &amp;a</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div>
逆参照
ポインタ変数は、プレフィックス を付けることで逆参照できます。これにより、ポインター変数がポインターが指す元の値に変換されます。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>var a int = 10
var p *int = &amp;a
fmt.Println(*p) // 输出:10</pre><div class="contentsignin">ログイン後にコピー</div></div>
ポインタ算術
-
ポインタ変数は加算演算と減算演算を実行できます。この操作により、ポインタが指すアドレスが移動します。例: var a [3]int = [3]int{1, 2, 3} var p *int = &a[0] fmt.Println(*p) // 输出:1 p++ fmt.Println(*p) // 输出:2
この例では、整数配列
a を定義し、その最初の要素のアドレスをポインター変数 p
に格納します。まず p
が指す値を出力し、次に p
を介してポインタを配列の 2 番目の要素に移動し、新しいポインタ値を再度出力します。 ポインターの適用
コピーの回避
###ポインタを使用してパラメータを渡すと、関数パラメータのコピーを回避できます。これにより、プログラムのメモリ使用量が削減され、関数の呼び出しにかかる時間が短縮されます。 例:func swap(a, b *int) { temp := *a *a = *b *b = temp } func main() { x, y := 1, 2 swap(&x, &y) fmt.Println(x, y) // 输出:2 1 }
swap
関数を定義します。関数内でポインターを逆参照し、2 つの変数の値を交換します。関数を呼び出すときに、2 つの変数のアドレスをswap 関数に渡します。これにより、関数は 2 つの変数のメモリ アドレスを直接操作できるようになります。
動的メモリ割り当て
p := new(int) *p = 10 fmt.Println(*p) // 输出:10
この例では、
new 関数を使用して、新しい int タイプのメモリ空間を割り当て、そのアドレスを
p # に保存します。 ## 真ん中。次に、*p = 10
によって、新しく割り当てられたメモリの値を 10
に設定します。最後に、*p
を使用して値にアクセスし、出力します。 複数の値を返す
Go 関数は複数の値を返すことができます。一般的な用途の 1 つは、関数の実行ステータスとエラー情報を返すことです。この場合、通常はエラーへのポインタを返します。例:
func add(a, b int) (int, *error) { if a < 0 || b < 0 { err := errors.New("arguments must be non-negative") return 0, &err } return a + b, nil } func main() { result, err := add(1, -2) if err != nil { fmt.Println(err) return } fmt.Println(result) }
関数を定義します。いずれかの引数が負の場合、エラー オブジェクトを作成し、それをポインタとして返します。
main 関数では、エラー ポインタが nil
であるかどうかを確認し、そうでない場合はエラー メッセージを出力し、そうでない場合は関数の戻り値を出力します。 概要
ポインタは、メモリ アドレスを直接操作してプログラムのパフォーマンスを向上させ、場合によっては問題を解決できる非常に便利なプログラミング ツールです。ポインターの基本操作を学習し、それを適切なシナリオに適用することで、効率的で信頼性の高い Go コードを作成できます。
以上がgolangポインタの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。