Go 基础指针

14 min read

1.值类型一般都有对应的指针类型,格式 *数据的类型 比如int->*int float64->*float64
2.0x开头的十六进制的一组数据
3.go语言中引用类型有哪些?指针,slice,map,chan,interface
4.值类型:变量存储的值是值类型,通常在栈中分配
5.引用类型:变量存储的是地址,这个地址对应的空间存储的才是实际的值,一般引用类型在堆中分配,一旦无任何变量来引用这块空间,那么会被操作系统进行垃圾回收。
6.go语言的指针没有指针运算,因为指针的乱引用会导致的内存泄漏,以及引发一连串程序的崩溃
7.修改指针指向变量的值,但是不会修改地址,通过指针改掉了指向变量对应的值
8.一个指针变量可以指向任何一个值的内存地址
9.指针也可以指向另一个指针,并且可以进行任意深度的嵌套,导致你可以有多级的间接引用,但在大多数情况这会使你的代码结构不清晰
10.当一个指针被定义后没有分配到任何变量时,它的值为 nil。对一个空指针的反向引用是不合法的,并且会使程序崩溃

// 引用类型
package main

import "fmt"

func main() {
  m:= map[int]string{1:"a",2:"b"}
  a:= []int{1,2,3}
  foo(m)
  bar(a)
  fmt.Println(m)  // map[1:c 2:b]
  fmt.Println(a)  // [100 2 3]
}

func foo(m map[int]string){
  m[1]="c"
}
func bar( a []int){
  a[0]=100
}