Go的指针

发布于 2023-10-17  235 次阅读


目标:什么是指针?

指针

指针是一个变量,其存储的是另一个变量的内存地址。通过指针,你可以在函数或方法中修改传入的参数的值,或者操作大型数据结构时提高效率。

类似于变量和常量,在使用指针前你需要声明指针。指针声明格式如下:

 // 示例
var var_name *var-type

var-type 为指针类型,var_name 为指针变量名,* 号用于指定变量是作为一个指针。以下是有效的指针声明:

 // 示例
var ip *int        /* 指向整型*/
var fp *float32    /* 指向浮点型 */

初始化

初始化的三种方式

 // 示例
package main

import "fmt"

type Person struct {
	Name string
	Age  int
}

func main (){
        // 指针初始化的三种方法
	// 第一种
	p1 := &Person{}
	fmt.Println(p1)

	// 第二种
	var emptyPerson Person
	p2 := &emptyPerson
	fmt.Println(p2)

	// 第三种
	p3 := new(Person)
	fmt.Println(p3)
}

使用

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。

在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。

 // 示例
package main

import "fmt"

func main() {
   var a int= 20   /* 声明实际变量 */
   var ip *int        /* 声明指针变量 */

   ip = &a  /* 指针变量的存储地址 */

   fmt.Printf("a 变量的地址是: %x\n", &a  )

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip )

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip )
}
// a 变量的地址是: 20818a220
// ip 变量储存的指针地址: 20818a220
// *ip 变量的值: 20

空指针

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

nil 指针也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

一个指针变量通常缩写为 ptr。

 // 示例
package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("ptr 的值为 : %x\n", ptr  )
}
// ptr 的值为 : 0

if(ptr != nil)     /* ptr 不是空指针 */
if(ptr == nil)    /* ptr 是空指针 */
届ける言葉を今は育ててる
最后更新于 2023-10-19