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)是一种拥有特殊规则的线性表数据结构

栈可用于内存分配,栈的分配和回收速度非常快

堆分配内存和栈分配内存相比,堆适合不可预知大小的内存分配。但是为此付出的代价是分配速度较慢,而且会形成内存碎片。

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/oceanran/p/12160452.html