在 上一篇文章 主要学习了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语言遍历数组可以使用for循环进行操作,关于for循环之前也提到过:
for循环说完了数组,在学习Go语言中的指针数组:
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向(对应)该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 那么指针数组又是什么?
指针数组简单理解:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,指针数组内每一个元素都是一个指针。既然指针数组内的元素全部是指针那么我们就可以这样去写:
var pointArrayName [POINT_SIZE]*int
假设现在有这样一个需求,我们需要将一个数组 copy到另一个数组,这个时候我们可以怎么去思考?
我们知道,对一个变量获取其地址值,是通过 & 关键字获取其变量的内存地址。然后,数组的本质就是在内存中开辟一块连续的内存地址空间。既然数组是连续的内存地址空间,那么我们就可以将这个连续的内存地址空间 赋值到 指针数组里面,在对 指针数组里面的指针 进行 *指针 即可完成对数组的复制。
指针数组说完了指针数组 在复习回顾下 二级指针,二级指针又称指向指针的指针。(用于存放二级指针的变量称为二级指针变量)
首先任何值都有地址 ,一级指针的值虽然是地址,但这个地址做为一个值同样也需要空间来存放,是空间就具有地址 , 因此二级指针就是存放地址这一值的空间所具有的地址。
二级指针的本质和目的就是为了获取这个地址。 值得一提的是,一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址,指针就是两个用途提供目标的读取或改写, 那么二级指针就是为了提供对于内存地址的读取或改写
下面是二级指针的一些基本内容以及使用:
二级指针因此,一级指针存储的是变量的地址值,而二级指针存储的才是真实的变量地址。
本篇文章主要学习的是Go语言中的数组、指针数组以及二级指针基本内容就结束了。文章关于指针的内容是基于C语言的,因此这里是做复习总结。毕竟无所不能的C语言影响了很多代人。
如果这篇文章对您有开发or学习上的些许帮助,希望各位看官留下宝贵的star,谢谢。
Ps:著作权归作者所有,转载请注明作者, 商业转载请联系作者获得授权,非商业转载请注明出处(开头或结尾请添加转载出处,添加原文url地址),文章请勿滥用,也希望大家尊重笔者的劳动成果
网友评论