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)	
}

在这里插入图片描述
基本数据类型在内存中的布局。
Golang学习之路—指针_第1张图片

指针类型

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

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)
}

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

内存布局图:
Golang学习之路—指针_第2张图片

指针取值

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

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。

你可能感兴趣的:(golang,区块链)