Go语言探索 - 8(原创)

Go语言基础系列博客用到的所有示例代码

在 上一篇文章 主要学习了Go 语言变量以及变量的作用域。本篇文章主要学习的是Go语言中的数组、指针数组以及二级指针

关于数组的概念应该不是很陌生,数组简单理解就是在内存中开辟一块连续的内存空间。对数组较好的定义是:数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。

在Go语言中,定义数组的 语法书写格式如下:  var variable_name [ 数组的长度 ] variable_type

在Go语言中,数组的初始化有以下几种写法:

A:初始化数组之前即确定大小,例如  var arraysName = [3]int{ 1, 2, 3 }

B:初始化数组前没有确定大小,例如 var arraysN = [...]int{4, 5, 6 , 7 , 8 } (如果使用此方式不设置数组的大小,Go 语言会根据元素的个数来设置数组的大小)

获取数组内的元素,也是跟其他语言一样,通过 数组名[索引] 去获取索引对应的属性值(索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推可以得知数组的最大索引是  数组的长度-1 ,最小索引是0)

Go语言探索 - 8(原创)
数组初始化

说到数组 一般我们会通过循环去遍历数组。Go语言遍历数组可以使用for循环进行操作,关于for循环之前也提到过:

Go语言探索 - 8(原创)
for循环

说完了数组,在学习Go语言中的指针数组:

指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向(对应)该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 那么指针数组又是什么?

指针数组简单理解:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,指针数组内每一个元素都是一个指针。既然指针数组内的元素全部是指针那么我们就可以这样去写:

  var pointArrayName  [POINT_SIZE]*int

假设现在有这样一个需求,我们需要将一个数组 copy到另一个数组,这个时候我们可以怎么去思考?

我们知道,对一个变量获取其地址值,是通过  & 关键字获取其变量的内存地址。然后,数组的本质就是在内存中开辟一块连续的内存地址空间。既然数组是连续的内存地址空间,那么我们就可以将这个连续的内存地址空间 赋值到 指针数组里面,在对 指针数组里面的指针 进行 *指针 即可完成对数组的复制。

Go语言探索 - 8(原创)
指针数组

说完了指针数组 在复习回顾下 二级指针,二级指针又称指向指针的指针。(用于存放二级指针的变量称为二级指针变量)

首先任何值都有地址 ,一级指针的值虽然是地址,但这个地址做为一个值同样也需要空间来存放,是空间就具有地址 , 因此二级指针就是存放地址这一值的空间所具有的地址。

二级指针的本质和目的就是为了获取这个地址。 值得一提的是,一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址,指针就是两个用途提供目标的读取或改写, 那么二级指针就是为了提供对于内存地址的读取或改写

下面是二级指针的一些基本内容以及使用:

Go语言探索 - 8(原创)
二级指针

因此,一级指针存储的是变量的地址值,而二级指针存储的才是真实的变量地址。

本篇文章主要学习的是Go语言中的数组、指针数组以及二级指针基本内容就结束了。文章关于指针的内容是基于C语言的,因此这里是做复习总结。毕竟无所不能的C语言影响了很多代人。

如果这篇文章对你有帮助,希望各位看官留下宝贵的star,谢谢。

Ps:著作权归作者所有,转载请注明作者, 商业转载请联系作者获得授权,非商业转载请注明出处(开头或结尾请添加转载出处,添加原文url地址),文章请勿滥用,也希望大家尊重笔者的劳动成果