Go语言中的指针
2026/5/16 17:19:58 网站建设 项目流程

文章目录

      • Go语言中的指针
      • 函数new
    • 指针的使用
      • 指针做函数参数

Go语言中的指针

Go语言保留了指针,但与C语言指针有所不同。主要体现在:

  • c语言中的指针,空值0,在go语言中空指针是nil

  • 操作符 “&” 取变量地址, " * " 通过指针访问目标对象

  • 不支持指针运算,不支持 “->” 运算符,

  • 直接⽤ “.” 访问目标成员

  • 只需使用new()函数,无需担心其内存的生命周期或怎样将其删除

funcmain(){varaint=100// 声明 int 变量 afmt.Printf("&a = %p\n",&a)// "&" 取 a 地址varp*int=nil// 声明变量p, 类型为 *intp=&a// p指向afmt.Printf("p = %p\n",p)fmt.Printf("a = %d, *p = %d\n",a,*p)*p=324//*p操作指针所指向的内存,即为afmt.Printf("a = %d, *p = %d\n",a,*p)}

函数new

  • new是给一个变量申请空间,返回申请空间的地址
  • 一般情况下new函数的参数是值类型,如果和引用类型,比如说切片,map,就需要new之后再给分配空间

​ new创建的内存空间默认值为数据类型默认值。如:new(int) 则 *p为0,new(bool) 则 *p为false

funcmain(){varp1*intp1=new(int)//p1为*int 类型, 指向匿名的int变量fmt.Println("*p1 = ",*p1)//*p1 = 0p2:=new(bool)//p2为*bool 类型, 指向匿名的bool变量fmt.Println("*p2 = ",*p2)//*p2 = false*p2=truefmt.Println("*p2 = ",*p2)//*p1 = truep3:=new([]int)//如果new一个切片后得到的其实是一个二级指针地址(*p3)=make([]int,5)(*p3)[1]=10;}

​ 我们只需使用new()函数,无需担心其内存的生命周期或怎样将其删除

指针的使用

go语言的垃圾回收机制

三色标记法

引用计数

指针做函数参数

funcswap01(a,bint){a,b=b,a fmt.Printf("swap01 a = %d, b = %d\n",a,b)}funcswap02(x,y*int){*x,*y=*y,*x}funcmain(){a:=10b:=20//swap01(a, b) //值传递(传值)swap02(&a,&b)//地址传递(传引用)fmt.Printf("a = %d, b = %d\n",a,b)}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询