golang - 指针

Golang 2020/11/19 Golang

这一节内容个人觉得很基础也很重要!

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

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。