golangポインタの使い方

王林
リリース: 2023-05-15 09:56:07
オリジナル
582 人が閲覧しました

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;amp;a</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div>

ここで、a は整数値 10 を格納しますが、p は ## A ポインターです#int 型の変数には、a のメモリ アドレスが格納されます。 &aa のアドレスを取り出して p に格納すると、a が格納したアドレスに p# 経由でアクセスできます。 ## 価値。 ポインターの操作

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;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;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
}
ログイン後にコピー

この例では、2 つの整数ポインターをパラメーターとして受け入れる

swap

関数を定義します。関数内でポインターを逆参照し、2 つの変数の値を交換します。関数を呼び出すときに、2 つの変数のアドレスを

swap 関数に渡します。これにより、関数は 2 つの変数のメモリ アドレスを直接操作できるようになります。 動的メモリ割り当て

ポインタは、動的メモリ割り当てに使用できます。 Go プログラムでは、

new

関数を使用してメモリを割り当て、新しく割り当てられたメモリのアドレスを返すことができます。例:

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)
}
ログイン後にコピー

この例では、入力パラメータの合計を計算する

add

関数を定義します。いずれかの引数が負の場合、エラー オブジェクトを作成し、それをポインタとして返します。

main

関数では、エラー ポインタが nil であるかどうかを確認し、そうでない場合はエラー メッセージを出力し、そうでない場合は関数の戻り値を出力します。 概要ポインタは、メモリ アドレスを直接操作してプログラムのパフォーマンスを向上させ、場合によっては問題を解決できる非常に便利なプログラミング ツールです。ポインターの基本操作を学習し、それを適切なシナリオに適用することで、効率的で信頼性の高い Go コードを作成できます。

以上がgolangポインタの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!