Go 语言指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boyun58/article/details/88852163

Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址

什么是指针
一个指针变量指向了一个值的内存地址。

声明格式

var var_name *var-type

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

使用指针

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。
  • 在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。
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 变量储存的指针地址: c0000100a0
ip 变量储存的指针地址: c0000100a0
ip的值是20

Go 空指针
当一个指针被定义后没有分配到任何变量时,它的值为 nil。
nil 指针也称为空指针。
nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

package main 

import "fmt"

func main(){
	var ptr *int

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

Go 语言指针数组

package main 

import "fmt"

const MAX int = 3


func main(){
	a := []int{100, 200, 300}
	var i int
	var ptr [MAX]*int

	for i=0;i<MAX;i++ {
		ptr[i] = &a[i]
	}

	for i=0;i<MAX; i++ {
		fmt.Printf("a[%d] = %d\n", i, *ptr[i])
	}
}
---------------------------------------------------
a[0] = 100
a[1] = 200
a[2] = 300

Go 语言指向指针的指针
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。
当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址
在这里插入图片描述放大图片

package main 

import "fmt"


func main(){
	var a int
	var ptr *int
	var pptr **int

	a = 3000

	ptr = &a

	pptr = &ptr

	fmt.Printf("变量a 为%d\n", a)
	fmt.Printf("指针变量 *ptr = %d\n", *ptr)
	fmt.Printf("指向指针的指针值 pptr %d\n", **pptr)
}
--------------------------------------------------------
变量a 为3000
指针变量 *ptr = 3000
指向指针的指针值 pptr 3000

Go 语言指针作为函数参数
Go 语言允许向函数传递指针,只需要在函数定义的参数上设置为指针类型即可

package main 

import "fmt"


func main(){
	var a int = 100
	var b int = 200

	fmt.Printf("交换前 a 的值%d\n", a)
	fmt.Printf("交换前 b 的值%d\n", b)
	swap(&a, &b)
	fmt.Printf("交换后 a 的值%d\n", a)
	fmt.Printf("交换后 b 的值%d\n", b)

}


func swap(x *int, y *int){
	var temp int
	temp = *x
	*x = *y
	*y = temp
}
-------------------------------------------------
交换前 a 的值100
交换前 b 的值200
交换后 a 的值200
交换后 b 的值100

猜你喜欢

转载自blog.csdn.net/boyun58/article/details/88852163