go的指针
指针(pointer)在Go语言中可以被拆分为两个核心概念:
- 类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。
- 切片,由指向起始元素的原始指针、元素数量和容量组成。
切片比原始指针具备更强大的特性,而且更为安全。
package main
import (
"fmt"
)
func main() {
var cat int = 1
var str string = "banana"
fmt.Printf("%p %p", &cat, &str)
// 对指针进行取值操作 value := *ptr // 取值后的类型 fmt.Printf("value type: %T\n", value)
}
运行结果:
0xc042052088 0xc0420461b0
使用 fmt.Printf 的动词%p打印 cat 和 str 变量的内存地址,指针的值是带有0x十六进制前缀的一组数据。
提示:变量、指针和地址三者的关系是,每个变量都拥有地址,指针的值就是地址。
当使用&操作符对普通变量进行取地址操作并得到变量的指针后,可以对指针使用*操作符,也就是指针取值
new() 函数可以创建一个对应类型的指针,创建过程会分配内存,被创建的指针指向默认值。
栈(Stack)是一种拥有特殊规则的线性表数据结构。
栈可用于内存分配,栈的分配和回收速度非常快
堆分配内存和栈分配内存相比,堆适合不可预知大小的内存分配。但是为此付出的代价是分配速度较慢,而且会形成内存碎片。
posted on 2020-01-07 11:17 HelloOcean 阅读(389) 评论(0) 收藏 举报
浙公网安备 33010602011771号