指针

go语言中不存在指针操作,只需记住两个符号

  • &: 取地址
  • *: 根据地址取值

简单的指针应用

package main

import "fmt"

func main() {
  a := 18
  //根据值取指针
  fmt.Println(&a) //返回的数是个16进制数
  //根据指针取值
  p := &a
  fmt.Println(*p)
  //查看指针数据是什么类型的
  fmt.Printf("%T", p) //*int类型的,*开头都是指针类型变量
}

总结:

取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。

变量,指针地址,指针变量,取地址,取值的相互关系和特征如下:

  • 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
  • 指针变量的值是指针地址
  • 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值

new

给一个变量声明一个 赋予一个内存空间

package main

import "fmt"

func main() {
  var a1 *int //这个默认是nil空值是不能被赋值的
  fmt.Println(a1)
  var a2 = new(int) //这个相当于申请了一个内存地址可以进行赋值
  *a2 = 1000
  fmt.Println(a2)
  fmt.Println(*a2) //这里发现打印的a2值为1000
}

make

make也是用于内存分配的,区别于new,它只用于slice(切片),map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没必要返回他们的指针了。

make函数的函数签名如下

func make(t Type, size ...IntegerType) Type

make函数是无可替代的,我们在使用slice,map以及channel的时候,都需要使用make进行初始化,然后才可以对它们进行操作。

make和new的区别

1.make 和new都是用来申请内存的

2.new很少用,一般都是用来给数据类型申请内存,string]、int 返回的是对应类型的指针

3.make是用来给slice、map、chan申请内存的,make函数返回的是对应的这三个类型本身

posted @   suknna  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示