Go语言程序设计(四)数组

news/2024/11/18 13:44:13/

一、数组的声明

        在声明数组时,必须指定数组名、数组长度和数组类型,格式如下:

var arrayName [arraySize] dataType

说明:

  • (1)数组名的命名规则和变量名相同,遵循标识符命名规则。
  • (2)在定义数组时,需要指定数组中元素的个数,即数组长度。例如,a[5]int表示整型数组a有5个元素。对数组元素的访问通过数组下标来进行,数组下标通常由“0”开始,数组a的5个元素是:a[0],a[1],a[2],a[3],a[4]。注意,不存在数组元素a[5]。
  • (3)一般情况下,数组所有元素的类型必须相同,可以是Go语言的任何基本数据类型。

二、数组的初始化

当数组定义好以后,如果没有给数组元素指定值,则所有元素被自动初始化为0。对数组元素的初始化,可以使用以下几种方式实现。

(1)在定义数组时对数组元素赋初值。例如:

var a= [10]int{1,2,3,4,5,6,7,8,9,10}

        在给数组元素赋初值时,要将初值依次放在一-对“{}”内,上例的定义和初始化后,a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5,a[5]=6,a[6]=7,a[7]=8,a[8]=9,a[9]=10。

(2)可以只给一-部分元素赋初值。例如:

var b=[10] int{1,2,3,4,5}

        该例中数组一共有10个元素,只给前5个元素赋了初值,则后面5个元素默认初始化为“0”。

(3)可以由初始化列表决定数组长度。例如:

varc=[...] int{1,2,3,4,5}

        该例中数组长度为“...”标识符,即没有指定数组长度,数组长度由初始化列表决定,在“{}”中给定了5个元素的初值,所以数组长度为5。注意,使用这种方式时,不能省略标识符“...”,否则就变成切片了

(4)还可以按下标初始化元素。例如:

var d=[10] int{2:4,5:7}

该例中d[2]=4,d[5]=7,其他数组元素被初始化为0。

三、数组的遍历

        在Go语言中还可以使用range关键字,以方便地遍历数组中的元素。

func main() {var f= [20]int{1,1}for i : =2; i<20; i++{f[i]=f[i-2]+f[i-1]}for i,v := range f {if i%5 == 0 {fmt. Printf("\n" )}fmt.Printf("f[%2d]= %4d",i,v)}
}

        从上面的代码可以看到,range具有两个返回值,第一个返回值i是数组的下标,第二个返回值v是元素的值。

四、多维数组

        多维数组(Multidimensional-array),是指它的每一个元素也是类型相同的一维数组时,便构成了多维数组。所谓数组的类型相同是指数组大小、元素类型相同。数组的维数是指数组的下标个数,一维数组只有一个下标,二维数组有两个下标,多维数组则有多个下标。
例如:

var a[3][4]int

这条语句,数组a被定义成了二维的。也可以把数组a看作是一个特殊的一维数组,它的每一个元素又是一个一-维数组。比如本例数组a有三个元素: a[0]、a[1]、a[2],它 的每个元素又是一个包含4个元素的一-维数组,如下:
a[0]:a[0] [0] a[0] [1] a[0] [2]
a[1]:a[1] [0] a[1] [1] a[1] [2]
a[2]:a[2] [0] a[2] [1] a[2] [2]

五、注意

        需要特别注意的是,在Go语言中数组是一个值类型(ValueType),所有值类型变量在赋值或作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改数组的内容,因为函数内操作的只是数组的一个副本。


http://www.ppmy.cn/news/747112.html

相关文章

6、架构:组件与物料设计

本章节主要是物料组件的开发设计&#xff0c;之前提到了物料的结构与构成&#xff0c;但是并没有做明确的解释。作为低代码编辑器中核心的模块之一。 物料即承担了一个提供者的角色&#xff0c;通过对编辑器注入物料组件来完成页面的渲染和可视化编辑器的编排&#xff0c;最终…

恩智浦 飞思卡尔Freescale Kinetis KEA128学习笔记1------环境和IDE工具

从keil官网上下了Keil uVision5&#xff0c;并从其官网上下了对应的芯片支持包NXP Keil.Kinetis_KEAxx_DFP.1.3.0.pack 所有的资料包上传到了百度云 Keil uVision5MDKKeil51破解工具型号包 链接: https://pan.baidu.com/s/1B6CxjESeUzTBtJ6CNUeL4g 提取码: 73my

恩智浦智能车竞赛摄像头相关组入门

可以看这位大佬写的博客&#xff0c;绝对的通俗易懂&#xff0c;本来自己想着也写一写&#xff0c;奈何本人还是太懒了。。。&#xff0c;距比赛结束时间也已经过去相当长的时间了&#xff0c;就不打算写了。 下面的链接专门针对使用摄像头作为传感器的新手入门用的。 (如果新…

❤️AI 从入门到精通❤️

前些天&#xff0c;发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程&#xff1a; ❤️强烈推荐人工智能学习网站❤️

❤️AI从入门到到精通❤️

前些天&#xff0c;发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程&#xff1a; ❤️强烈推荐人工智能学习网站❤️

快思聪控制电脑关机及自定义运行小应用

使用原理 快思聪使用TCP Client进行HTTP GET访问小应用&#xff0c;小应用对URL进行解析&#xff0c;然后实现关机&#xff0c;休眠&#xff0c;运行指定程序等功能。 新增音量控制 v1.1 下载地址&#xff1a;v1.1 remoteshutdown 该项目是一个 Windows 应用程序&#xff0…

从入门到精通

很早就想总结一下新手常见的问题和回答了。但一直没有空出时间来做。在论坛久了&#xff0c;发现一个不得不解决的问题&#xff0c;就是重复发问。一个问题被换汤不换药地反复提出&#xff0c;如果不回答就会被认为摆架子、有违“零起点”的称号&#xff1b;如果详细回答实在是…

敏捷开发--(1)敏捷开发入门谈

公司所有开发组目前都在提倡敏捷开发&#xff0c;我所在的开发组也没有out&#xff0c;刚刚发版的产品我们就引入了敏捷开发的一些概念--虽然还比较粗糙&#xff0c;但整体感觉还是蛮好的。发版后&#xff0c;有一段空闲期&#xff0c;闲来无事&#xff0c;看到同事桌上有本《轻…