【go语言】复杂数据类型——指针

1.指针

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。

1.1 定义

指针是一个变量,存储的是另一个变量的内存地址。

Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。

1.2 声明指针

var p *int //声明一个指向 int 类型的指针

1.3 指针取值

在对普通变量使用 & 操作符取地址后会获得这个变量的指针,然后可以对指针使用 操作,也就是指针取值,代码如下。

a := 1
b := &a // 取变量a的地址,将指针保存到b中
fmt.Printf("type of b:%T\n", b)  //type of b:*int
c := *b // 指针取值(根据指针去内存取值)
fmt.Printf("type of c:%T\n", c)  //type of c:int
fmt.Printf("value of c:%v\n", c) //value of c:1

1.4 空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil。

尝试解引用 nil 指针会导致运行时 panic。

var p *int
if p == nil {
    fmt.Println("p is nil")
}
// fmt.Println(*p) // 运行时 panic: nil pointer dereference

1.5 new和make

Go语言中对于引用类型的变量,我们在使用的时候不仅要声明它,还要为它分配内存空间,否则我们无法赋值。而对于值类型的声明不需要分配内存空间,是因为它们在声明的时候已经默认分配好了内存空间。要分配内存,就引出来今天的new和make。 Go语言中new和make是内建的两个函数,主要用来分配内存。

1.51 new

(1)定义

  • new 是一个内置函数,用于为任意类型分配内存。
  • 它返回指向该类型零值的指针

(2)语法

new(Type)
  • Type:要分配内存的类型。
  • 返回值是一个指向 Type 类型零值的指针(*Type)。
1.52 make

(1)定义

  • make 是一个内置函数,用于初始化某些特定类型的值。
  • 它只适用于以下三种类型:
    • 切片(slice
    • 映射(map
    • 通道(channel

(2)语法

make(Type, size)
  • Type:要初始化的类型(必须是切片、映射或通道)。
  • size:可选参数,表示初始大小或容量(对于切片和映射有效)。
new与make的区别
1.二者都是用来做内存分配的。
2.make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;
3.而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值