Golang学习之路—指针

基本介绍

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。
Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算。Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。

指针地址

每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:*int、*int64、*string等。

比如:var i int,获取num的地址:&i.

package main

import "fmt"

func main(){
    
    
	var i int = 10
	// i的地址
	fmt.Println("i的地址 =",&i)	
}

在这里插入图片描述
基本数据类型在内存中的布局。
在这里插入图片描述

指针类型

指针变量存的是一个地址,这个地址指向的空间存的才是值。

package main

import "fmt"

func main(){
    
    
	//基本数据类型在内存布局
	var i int = 10
	// i的地址
	fmt.Println("i的地址 =",&i)	

	//ptr是一个指针变量
	//ptr的类型是 *int
	//ptr本身的值&i
	var ptr *int = &i
	fmt.Printf("ptr =%v\n",ptr)
}

运行结果:
在这里插入图片描述

内存布局图:
在这里插入图片描述

指针取值

在对普通变量使用&操作符取地址后会获得这个变量的指针,然后可以对指针使用*操作,也就是指针取值,代码如下。

package main

import "fmt"

func main(){
    
    
	
	//指针取值
	a := 10
	//取变量a的地址,将指针保存到b中
	ptr := &a
	fmt.Printf("type of ptr: %T\n",ptr)
	//指针取值(根据指针去内存取值)
    c := *ptr
	fmt.Printf("type of c:%T\n",c)
	fmt.Printf("type of c:%v\n",c)
}

运行结果:
在这里插入图片描述

指针使用细节

  • 值类型,都有对应的指针类型,形式为*数据累次那个,比如int的对应指针就是 * int,依次类推。
  • 值类型包括:基本数据类型 int系列,float系列,bool,string,数组和结构体struct。

猜你喜欢

转载自blog.csdn.net/weixin_44736475/article/details/113920011