全栈编程

Balance $ 2,317
Item Sold 1230
文章作者: 全栈编程@luboke.com
版权声明: 本文章为go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!

知识大纲 【go语言体系课】指针知识大纲,版权@luboke.com,受法律保护。

指针

一、指针概述(是什么)

程序在内存中存储它的值,每个内存块都 有一个地址,而存储这个地址的变量被称为指针变量,指针。
通常用十六进制数表示,如:0x6b0820 或 0xf84001d7f0

一个指针变量可以指向任何一个值的内存地址 它指向那个值的内存地址,在 32 位机器上占用 4 个字节,在 64 位机器上占用 8 个字节,并且与它所指向的值的大小无关。
指针可以指向任何类型的值,但是使用时指定指针的类型在实际编码中具有重要意义;
在指针类型前面加上 * 号来获取指针所指向的内容。
使用一个指针引用一个值被称为间接引用。

1.主要用于管理内存
2.指针是一个特殊的变量
3.存储的是另一个变量的内存地址
4.指针内存示意图

二、指针的作用及应用场景

作用

    1. 节省内存空间,提高执行效率(当操作的数据量较大规模时)
    1. 访问变量的值

应用场景

    1. 修改变量的值
    1. 访问变量的值

三、指针变量操作(怎么使用)

先定义变量,再定义指针去取变量的地址,那么这个变量存储的就是地址,实际的值是这个地址指向的空间

//先定义变量,再定义指针去取变量的地址
var intVariables int = 100
fmt.Printf("intVariables的值=%d,地址=%v\n",intVariables,&intVariables)

//定义一个指针类型的变量,那么这个变量存储的就是地址,实际的值是这个地址指向的空间
//定义一个指针类型的变量去指向 intVariables
var pointerVariables *int = &intVariables
fmt.Printf("pointerVariables的值=%v,地址=%v\n",pointerVariables,&pointerVariables)

取地址操作符&,一般在指针操作当中经常使用,&取出地址
取值操作符*,一般在指针操作当中,*根据地址找该地址指向空间的值。

指针变量的内存分析

/*
   变量名             变量值           地址
   intVariables      100              0xc00006c008
   pointerVariables    0xc00006e008    0xc00007c020
*/

取变量值的方式

1.直接通过变量名,variables
2.通过指针间接访问(指针名),pointerVariables

四、注意事项

1.值类型一般都有对应的指针类型,格式 数据的类型 比如int->int float64->*float64
2.0x开头的十六进制的一组数据
3.go语言中引用类型有哪些?指针,slice,map,chan,interface
4.值类型:变量存储的值是值类型,通常在栈中分配
5.引用类型:变量存储的是地址,这个地址对应的空间存储的才是实际的值,一般引用类型在堆中分配,一旦无任何变量来引用这块空间,那么会被操作系统进行垃圾回收。
6.go语言的指针没有指针运算,因为指针的乱引用会导致的内存泄漏,以及引发一连串程序的崩溃
7.修改指针指向变量的值,但是不会修改地址,通过指针改掉了指向变量对应的值
8.一个指针变量可以指向任何一个值的内存地址
9.指针也可以指向另一个指针,并且可以进行任意深度的嵌套,导致你可以有多级的间接引用,但在大多数情况这会使你的代码结构不清晰
10.当一个指针被定义后没有分配到任何变量时,它的值为 nil。对一个空指针的反向引用是不合法的,并且会使程序崩溃

知识大纲 【go语言体系课】指针知识大纲,版权@luboke.com,受法律保护。

文章作者: 全栈编程@luboke.com
版权声明: 本文章为go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!
copyright © 2020 全栈编程@luboke.com