Go 言語ポインター


Go 言語のポインターは習得が簡単です。Go 言語でポインターを使用すると、いくつかのタスクを簡単に実行できます。

次に、Go 言語ポインターを段階的に学習しましょう。

変数はコンピューターのメモリ アドレスを参照するために使用される便利なプレースホルダーであることは誰もが知っています。

Go言語のアドレス取得文字は&です。変数の前に使用すると、対応する変数のメモリアドレスが返されます。

次の例は、メモリ内の変数のアドレスを示しています:

package main

import "fmt"

func main() {
   var a int = 10   

   fmt.Printf("变量的地址: %x\n", &a  )
}

上記のコードを実行した出力結果は次のとおりです:

变量的地址: 20818a220

これで、メモリ アドレスとは何か、およびそれにアクセスする方法は理解できました。次にポインタを詳しく紹介します。


ポインタとは

ポインタ変数は、任意の値のメモリアドレスを指すことができ、その値のメモリアドレスを指します。

変数や定数と同様に、ポインターを使用する前に宣言する必要があります。ポインタの宣言形式は次のとおりです。

var var_name *var-type

var-type はポインタの型、var_name はポインタ変数名で、* 記号は変数がポインタとして使用されることを指定するために使用されます。有効なポインタ宣言は次のとおりです:

var ip *int        /* 指向整型*/
var fp *float32    /* 指向浮点型 */

この場合、これは int および float32 へのポインタです。


ポインターの使用方法

ポインターの使用プロセス:

  • ポインター変数を定義します。

  • ポインタ変数に値を代入します。

  • ポインタ変数のアドレスを指す値にアクセスします。

ポインターが指す内容を取得するには、ポインター型の前に * 記号 (接頭辞) を追加します。

package main

import "fmt"

func main() {
   var a int= 20   /* 声明实际变量 */
   var ip *int        /* 声明指针变量 */

   ip = &a  /* 指针变量的存储地址 */

   fmt.Printf("a 变量的地址是: %x\n", &a  )

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量的存储地址: %x\n", ip )

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip )
}

上記の例の実行出力は次のとおりです:

a 变量的地址是: 20818a220
ip 变量的存储地址: 20818a220
*ip 变量的值: 20

Go null pointer

ポインターが定義され、どの変数にも割り当てられていない場合、その値は nil です。

nil ポインターは null ポインターとも呼ばれます。

nil は概念的には他の言語の null、None、nil、NULL と同じであり、それらはすべてゼロまたは空の値を指します。

ポインタ変数は通常、ptr と省略されます。

次の例を参照してください:

package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("ptr 的值为 : %x\n", ptr  )
}

上記の例の出力結果は次のとおりです:

ptr 的值为 : 0

Null ポインターの判定:

if(ptr != nil)     /* ptr 不是空指针 */
if(ptr == nil)    /* ptr 是空指针 */

Go ポインターのその他のコンテンツ

次に、Go 言語でのその他のポインター アプリケーションを紹介します。

コンテンツ説明
Go ポインタ配列アドレスを格納するポインタの配列を定義できます
Go ポインタ to ポインタGo はポインタ to ポインタをサポートします
行く関数のようにポインタパラメータを渡しますパラメータを参照またはアドレスで渡し、関数の呼び出し時に値を変更できます