0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go:入門者向けにポインタをコードで解説

Posted at

はじめに

Go言語のポインタの概念が分かりづらく、理解に時間を要しました。
初心者は、文章よりもコードを書いて動かしてみる方が理解が深まると思うので、本記事のコードを参考にしてください!

ポインタとは

ポインタは、ある値が格納されているメモリアドレスを保持する変数です。
ポインタを使用すると、直接そのメモリアドレスにアクセスして値を読み書きすることができます。
以下の演算子を使用して、ポインタを宣言します。

  • &演算子:変数のメモリアドレスを取得します。
  • *演算子:ポインタが指すメモリアドレスの値にアクセスします。

例:ポインタを使って値を変更する

package main

import "fmt"

func main() {
    number := 10                                // 整数変数の定義
    fmt.Println("元の値:", number)               // 元の値の出力
    fmt.Println("numberのアドレス:", &number)      // numberのメモリアドレスの出力

    ptr := &number                             // numberのアドレスをptrに格納
    *ptr = 20                                  // ptrが指すアドレスの値を20に変更
    fmt.Println("ptrが指す値:", *ptr)           // ptrが指す値の出力
    fmt.Println("ptrの値(アドレス):", ptr)        // ptrの値(実際はアドレス)の出力

    fmt.Println("変更後の値:", number)          // 変更後の値の出力
}

実行結果

このコードを実行すると、numberの値がポインタptrを通じて20に変更されます。
ポインタを使用することで、メモリアドレスを介して変数の値を直接操作できることがわかります。

元の値: 10
numberのアドレス: 0xc0000120b8
ptrが指す値: 20
ptrの値アドレス: 0xc0000120b8
変更後の値: 20

例:ポインタを使う関数

ポインタを使用する関数は、引数や戻り値としてポインタを受け渡します。
以下の例では、整数のポインタを引数に取る関数を定義し、その値を変更します。

package main

import "fmt"

// incrementは、整数のポインタを受け取り、その値を1増やし、ポインタを返します。
func increment(number *int) *int {
	fmt.Println("increment内のnumberのアドレス:", number) // increment関数内でのアドレスを表示
	*number += 1
	return number // 増加後の値のポインタを返す
}

func main() {
	myNumber := 10
	fmt.Println("元の値:", myNumber)                     // 元の値を表示
	fmt.Println("main内のmyNumberのアドレス:", &myNumber)   // myNumberのアドレスを表示

	newPtr := increment(&myNumber)                      // 戻り値としてポインタを受け取る
	fmt.Println("increment後の戻り値のアドレス:", newPtr)    // 戻り値のポインタを表示
	fmt.Println("increment後の戻り値の値:", *newPtr)       // 戻り値のポインタが指す値を表示
	fmt.Println("増加後:", myNumber)                    // 増加後の値を表示
}

実行結果

このコードを実行すると、increment関数がmyNumberの値を変更し、その新しい値(11)を返していることがわかります。
また、myNumberの値も同時に変更されていることが確認できます。

元の値: 10
main内のmyNumberのアドレス: 0xc0000120b8
increment内のnumberのアドレス: 0xc0000120b8
increment後の戻り値のアドレス: 0xc0000120b8
increment後の戻り値の値: 11
増加後: 11
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?