这一节内容个人觉得很基础也很重要!
1.1 指针的创建
Go保留了指针,代表某个内存地址,默认值为 `nil` ,使用 `&` 取变量地址,通过 `*` 访问目标对象。
简单示例:
var a int = 10 fmt.Println("&a=", &a) // 0xc000096008 一个十六进制数 var p *int = &a fmt.Println("*p=", *p) // 10
注意:
- Go同样支持多级指针,如 `**T`
- 空指针:声明但未初始化的指针
- 野指针:引用了无效地址的指针,如:`var p *int = 0`,`var p *int = 0xff00`(超出范围)
- Go中直接使用` . `访问目标成员
1.2 指针使用示例:实现变量值交换
func swap(p1,p2 *int) { *p1,*p2 = *p2,*p1 }
1.3 结构体指针
示例:
type User struct{ name string age int } func main() { var u = User{ name:"lisi", age: 18, } p := &u fmt.Println(u.name) //输出李四 fmt.Println(p.name) //输出李四 }
1.4 Go不支持指针运算
由于垃圾回收机制的存在,指针运算造成许多困扰,所以Go直接禁止了指针运算
a := 1 p := &a p++ //报错:non-numeric type *int
1.5 new()函数使用
new()函数可以在 heap堆 区申请一片内存地址空间:
var p *bool p = new(bool) fmt.Println(*p) // false
本文地址:https://www.stayed.cn/item/287
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我