在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
目录
变量和内存地址1、每个变量都有内存地址,可以说通过变量来操作对应大小的内存 var a int32 a = 100 fmt.Printf(“%d\n”, a) fmt.Printf(“%p\n”, &a) 注意:通过&符号可以获取变量的地址 指针类型1、普通变量存储的是对应类型的值,这些类型就叫值类型 var b int32 b = 156 fmt.Printf(“%d\n”, b) fmt.Printf(“%p\n”, &b)
2、指针类型的变量存储的是一个地址,所以又叫指针类型或引用类型
var b int32 b = 156 var a *int32 a = &b
3、指针类型定义,var 变量名 *类型 package main import ( "fmt" ) func main() { b := 255 var a *int = &b fmt.Printf("Type of a is %T\n", a) fmt.Println("address of b is", a) }
4、 指针类型变量的默认值为nil,也就是空地址 package main import ( "fmt" ) func main() { a := 25 var b *int if b == nil { fmt.Println("b is", b) b = &a fmt.Println("b after initialization is", b) } }
5、如果操作指针变量量指向的地址⾥里里⾯面的值呢? package main import ( "fmt" ) func main() { b := 255 a := &b fmt.Println("address of b is", a) fmt.Println("value of b is", *a) } 注意:通过* 符号可以获取指针变量量指向的变量 6、通过指针修改变量的值 package main 7、指针变量传参 package main import ( "fmt" ) func change(val *int) { *val = 55 } func main() { a := 58 fmt.Println("value of a before function call is",a) b := &a change(b) fmt.Println("value of a after function call is", a) }
8、 指针变量传参示例2 package main import ( "fmt" ) func modify(arr *[3]int) { (*arr)[0] = 90 } func main() { a := [3]int{89, 90, 91} modify(&a) fmt.Println(a) }
9、切片传参 package main import ( "fmt" ) func modify(sls []int) { sls[0] = 90 } func main() { a := [3]int{89, 90, 91} modify(a[:]) fmt.Println(a) }
10、make用来分配引用类型的内存,比如 map、slice以及channel。new用来分配除引用类型的所有其他类型的内存,比如 int、数组等
值拷贝和引用拷贝1、值拷贝和引⽤用拷贝 a-->100 b-->100 package main import ( "fmt" ) func main() { var a int = 100 b := a }
b --> a c--> a a--> 100 package main import ( "fmt" ) func main() { var a int = 100 var b *int = &a var c *int = b *c = 200 }
|
请发表评论