Golang 指针

指针

基本介绍

  1. 基本数据类型,变量存的就是值,也叫值类型

2)获取变量的地址,用&,比如:var num int,获取num的地址:&num

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

/*
%T 类型占位符
%v 值占位符
%p 地址(指针)占位符,只有地址才能替换%p
&value 对值取地址
*addr 对地址取值
**int 指向int型指针的指针
作用:函数传参时,传递指针叫引用传递,值传递是拷贝式的,对被传参数的修改是不会改变本体的,想要改变本体只能是引用传递
*/

import "fmt"

//指针就是地址
//&value 对值取地址
//*ptr 对地址取值

func main(){

//演练golang中指针类型
var i int = 10
//i 的地址是什么,&i
fmt.Println("i的地址=",&i)

}

分析一下基本数据类型在内存中的存在方式

3.指针类型,指针变量存的是一个地址,这个地址指向的空间才是值

比如 var ptr *int = &num

案例说明:指针在内存中的布局

  1. 获取指针所指向的值,使用:*, 比如:var ptr *int,使用 *prt获取prt的值

5.一个案例再说明

6.指针小案例

1)写一个程序,获取一个int变量num的地址,并显示到终端

2)将num的地址赋值给指针ptr,并通过ptr去修改num的值

图解:

小结:

指针的使用细节

1)值类型都有对应的指针类型,形式为 *数据类型,比如int的对应的指针就是 *int, *float32 对应的指针类型就是 *float32 以此类推。

2)值类型包括:基本数据类型 int系列 ,float系列,bool,string,数组和结构体struct

3)值类型:基本数据类型 int系列 ,float系列,bool,string,数组和结构体struct

4.引用类型:指针,slice切片,map,管道chan,interface等都是引用类型

引用类型使用的特点:

1)值类型:变量直接存储值,内存通常在栈中分配

示意图:

2)引用类型:变量存储的是一个地址,这个地址对应的空间才是真正存储的值数据(值)内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就会成为垃圾由GC来回收

3)内存的栈区和堆区的示意图