#メモリのしくみ
コンピュータのメモリにアドレス信号を制御する場所が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型と足し算はできない
*/
}