Go语言中的指针
文章目录Go语言中的指针函数new指针的使用指针做函数参数Go语言中的指针Go语言保留了指针但与C语言指针有所不同。主要体现在c语言中的指针,空值0,在go语言中空指针是nil操作符 “” 取变量地址 * 通过指针访问目标对象不支持指针运算不支持 “-” 运算符直接⽤ “.” 访问目标成员只需使用new()函数无需担心其内存的生命周期或怎样将其删除funcmain(){varaint100// 声明 int 变量 afmt.Printf(a %p\n,a)// 取 a 地址varp*intnil// 声明变量p, 类型为 *intpa// p指向afmt.Printf(p %p\n,p)fmt.Printf(a %d, *p %d\n,a,*p)*p324//*p操作指针所指向的内存即为afmt.Printf(a %d, *p %d\n,a,*p)}函数newnew是给一个变量申请空间,返回申请空间的地址一般情况下new函数的参数是值类型,如果和引用类型,比如说切片,map,就需要new之后再给分配空间 new创建的内存空间默认值为数据类型默认值。如new(int) 则 *p为0new(bool) 则 *p为falsefuncmain(){varp1*intp1new(int)//p1为*int 类型, 指向匿名的int变量fmt.Println(*p1 ,*p1)//*p1 0p2:new(bool)//p2为*bool 类型, 指向匿名的bool变量fmt.Println(*p2 ,*p2)//*p2 false*p2truefmt.Println(*p2 ,*p2)//*p1 truep3:new([]int)//如果new一个切片后得到的其实是一个二级指针地址(*p3)make([]int,5)(*p3)[1]10;} 我们只需使用new()函数无需担心其内存的生命周期或怎样将其删除指针的使用go语言的垃圾回收机制三色标记法引用计数指针做函数参数funcswap01(a,bint){a,bb,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)}