LoginSignup
0
0

More than 1 year has passed since last update.

GOポインタの勉強

Posted at

#メモリのしくみ

コンピュータのメモリにアドレス信号を制御する場所が10か所あるとしたら、それぞれに0か1が入るので、
2^10=1024とおりの住所が作成できる。言い換えると1024byte=1KBのメモリ容量となる。

現在のメモリは0か1かの制御を1.2~1.5Vの電圧の差で行い、3200MHz(32億回/秒)の送受信ができる。

#ポインタについて

住所は16進数で表され、その住所を直接知りたいときは「ポインタ型」という変数の型をつかい、
その型で宣言された変数を「ポインタ型変数」という。

「ポインタ型」だけでは宣言できない。どのリテラルのポインタ型か(intとかstrとか)も宣言する。


func main() {

	var a string = "hello"
	fmt.Println(a)
    //hello

    //str型のポインタ型変数pを宣言する
	var p *string


            /* ×な例
            p = a 
            上記ではポインタのアドレスpにaを格納することはできない
            aはstr型 pはstr型ポインタ型で別物なので代入できない
            */


    p = &a
    	//変数aのポインタを取り出すには&をつけて&aとする
	
    fmt.Println(p)  //ポインタのアドレスをそのまま出力
        //0xc000088220  ...アドレスが出力される

        fmt.Println(*p) 
        //*をつけるとデリファレンスされる。デリファレンスとは参照先を見に行くということ。
        //すなわち*アドレスでアドレスから数値をとりにいく
        //hello

	var b string = "world"
	fmt.Println(b)   //world
	fmt.Println(&b) //&でポインタ型変数に。もとのstr型をつけてくれるらしい。
    //0xc000088250

 /*
  var  c *string
	c = p+30
	fmt.Println(c)

    アドレスは16進数の数字だけど、int型と足し算はできない
 */


}

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