go数组的声明和初始化

1.数组简介

数组是可以存放多个同一类型的数据。数组也是一种数据类型,在go中,数组是值类型。数组的长度也是数组类型的一部分,所以[2]int和[3]int属于不同的数据类型。

2.数组的长度也是类型的一部分

    var arr1 [2]intvar arr2 [3]intfmt.Printf("arr1数据类型:%T\narr2数据类型:%T\n", arr1, arr2)

结果:

arr1数据类型:[2]int
arr2数据类型:[3]int

3.数组的定义

语法:var 数组名 [数组大小]数据类型

示例: var a [5]int 

            var b [3]string

4.数组的初始化

4.1第一种方法

    var intarr [3]intintarr[0] = 1intarr[1] = 2intarr[2] = 3fmt.Println(intarr)var strarr [3]stringstrarr[0] = "js"strarr[1] = "java"strarr[2] = "go"fmt.Println(strarr)

结果:

[1 2 3]
[js java go]

4.2第二种方法

    var intarr = [3]int{1, 2, 3}var strarr = [3]string{"java", "go", "javascript"}fmt.Println(intarr)fmt.Println(strarr)

结果:

[1 2 3]
[java go javascript]

4.3第三种方法

[...]让编译器自动根据初始化值的个数自行推断数组的长度。

    var intarr = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}var strarr = [...]string{"golang", "java", "php"}fmt.Println(intarr)fmt.Println(strarr)fmt.Printf("intarr数据类型:%T\nstrarr数据类型:%T\n", intarr, strarr)

结果:

[1 2 3 4 5 6 7 8 9]
[golang java php]
intarr数据类型:[9]int
strarr数据类型:[3]string

4.4第四种方法

可以根据指定索引来初始化数组。

	intarr := [...]int{1: 1, 0: 3, 2: 5, 9: 9}fmt.Println(intarr)strarr := [3]string{1: "a", 2: "b", 0: "c"}fmt.Println(strarr)

结果:

[3 1 5 0 0 0 0 0 0 9]
[c a b]

5.数组的内存布局

数组是值类型,更改副本的值,不会改变本身的值。

	var arr = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}arr2 := arrarr[0] = 10fmt.Println("arr=", arr)fmt.Println("arr2=", arr2)

 结果:

arr= [10 2 3 4 5 6 7 8 9]
arr2= [1 2 3 4 5 6 7 8 9]

 内存分布

	var intarr = [3]int{1, 2, 3}fmt.Println(intarr)fmt.Printf("intarr的地址=%p intarr[0]地址%p intarr[1]地址%p intarr[2]地址%p\n", &intarr, &intarr[0], &intarr[1], &intarr[2])

结果:

[1 2 3]
intarr的地址=0xc000014120 intarr[0]地址0xc000014120 intarr[1]地址0xc000014128 intarr[2]地址0xc000014130

有结果可以看出:

1.数组的地址可以通过数组名获取&intarr。

2.数组的第一元素的地址,就是数组的首地址。(intarr的地址=0xc000014120 intarr[0]地址0xc000014120)

3.数组的各个元素的地址间隔一句数组的类型决定,比如int64 -> 8  int32->4.

6.数组的遍历

6.1常规方法

var arr1 = [3]int{1, 2, 3}for i := 0; i < len(arr1); i++ {fmt.Println(arr1[i])}

 结果:

1
2
3

6.2for-range结构遍历

var arr1 = [3]int{1, 2, 3}
for index, value := range arr1 {fmt.Printf("下标:%v--值:%v\n", index, value)}

结果:

下标:0--值:1
下标:1--值:2
下标:2--值:3

7.数组使用的注意事项和细节

7.1数组是多个相同类型的组合,一个数组一旦声明/定义了。其长度是固定的,不能动态变化。

7.2数组中的元素可以是任意数据类型,包括值类型和引用类型,但是不能混用。

7.3数组创建后,如果没有赋值,则默认值(零值),数值默认0,字符串默认”“,bool默认false

var intarr [3]int
fmt.Println(intarr)

结果:

[0 0 0]

7.4使用数组步骤

1.声明数组并开辟空间

2.给数组各个元素赋值(默认零值)

3.使用数组 

7.5数组的下标是从0开始的。

7.6数组下标必须在指定范围内使用,否则包panic:数组越界。

var arr [5]int  则有效下标为0-4

7.7go的数组类型属于值类型,在默认情况下是值传递,因此会进行只拷贝。数组间不会相互影响。

7.8如果想在其他函数中,去修改原来的数组,可以使用引用传递(指针传递)

func test(arr *[3]int)  {(*arr)[0]=12
}

7.9长度是数组的一部分,在传递函数参数时,需要考虑数组的长度。

8.练习

练习一求平均值

var arr = [...]int{98, 68, 78, 99, 98, 76, 90, 88}var sum = 0for i := 0; i < len(arr); i++ {sum += arr[i]}fmt.Println(float32(sum) / float32(len(arr)))

结果:86.875

练习二:求最大值和对应的下标

    var arr = [...]int{98, 68, 78, 99, 98, 76, 90, 88}maxkey := 0maxvalue := arr[0]for key, value := range arr {if value > maxvalue {maxkey = keymaxvalue = value}}fmt.Printf("最大值::%d,下标:%d\n", maxvalue, maxkey)

结果:最大值::99,下标:3

练习三:创建一个byte类型的数组,分别存放'A'-'Z',使用for循环遍历.

var mychars [26]bytefor i := 0; i < 26; i++ {mychars[i] = 'A' + byte(i)}for i := 0; i < len(mychars); i++ {fmt.Printf("%c", mychars[i])}

 结果:ABCDEFGHIJKLMNOPQRSTUVWXYZ

10.多维数组(了解)

var 数组变量名称 [元素数量][元素数量]T
var strarr = [3][2]string{{"a", "b"},{"b", "c"},{"d", "e"},}fmt.Println(strarr)fmt.Println(strarr[1])for i := 0; i < len(strarr); i++ {for j := 0; j < len(strarr[i]); j++ {fmt.Println(strarr[i][j])}}

结果:

[[a b] [b c] [d e]]
[b c]
a
b
b
c
d
e

注意事项:注意多维数组只有第一层可以用[...]让编译器退到数组的长度

a:=[...][2]string{} 支持

a:=[3][...]string{} 不支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四款GIS工具箱软件解析:满足企业多样化空间数据需求

概述 随着地理信息系统&#xff08;GIS&#xff09;在城市规划、环境监测、资源管理等领域的广泛应用&#xff0c;各种GIS工具箱软件不断涌现&#xff0c;为用户提供了强大的数据处理、空间分析和地图制图功能。本文将为大家介绍4款GIS工具箱软件&#xff0c;这些软件各具特色…

VirtualBox虚拟机安装Mac OS启动后的系统设置

VirtualBox虚拟机安装Mac OS一直没装成功&#xff0c;本来想要放弃的&#xff0c;后来想着再试一次&#xff0c;于是在关机的情况&#xff0c;执行那几句设置&#xff1a; cd "E:\Program Files\Oracle\VirtualBox\" VBoxManage.exe modifyvm "MacOS" --c…

[力扣每日一练]关于所有不同域名的查找

一、题目要求&#xff1a; 表&#xff1a;Emails---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是这张表的主键&#xff08;有不同值的列&#xff09;。 这张表的…

blender看不到导入的模型

参考&#xff1a;blender 快捷键 常见问题_blender材质预览快捷键-CSDN博客 方法一&#xff1a;视图-裁剪起点&#xff0c;设置一个很大的值 方法二&#xff1a;选中所有对象&#xff0c;对齐视图-视图对齐活动项-选择一个视图

HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践

HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践 引言 在万物互联时代&#xff0c;操作系统对编译技术的需求已从单纯的代码转换演变为跨设备协同、高效资源调度与极致性能优化的综合挑战。华为鸿蒙系统&#xff08;HarmonyOS&#xff09;自主研发的ArkCompiler…

Kanna 与 Swift:结合使用提升网络请求效率

Kanna 是一个基于 Swift 的轻量级、高性能的 XML/HTML 解析库&#xff0c;它能够帮助开发者快速解析和处理网络返回的 HTML 或 XML 数据。通过结合 Kanna 和 Swift 的网络请求功能&#xff0c;我们可以构建更加高效、灵活的网络交互模块。本文将详细介绍如何在 Swift 中使用 Ka…

《大语言模型的原理发展与应用》:此文为AI自动生成

《大语言模型的原理发展与应用》&#xff1a;此文为AI自动生成 一、引言&#xff1a;大语言模型&#xff0c;AI 时代的 “新引擎” 在当今数字化浪潮中&#xff0c;大语言模型宛如一颗璀璨的明星&#xff0c;照亮了人工智能发展的道路&#xff0c;成为推动各领域变革的核心驱…

RabbitMQ消息队列 面试专题

RabbitMQ消息队列 面试专题 RabbitMQ的实现原理为什么需要消息队列常见消息队列比较如何保证消息不丢失如何防止消息重复消费如何保证消息的有序性如何处理消息堆积 RabbitMQ的实现原理 RabbitMQ 是一个基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09; 协…

【Hudi-SQL DDL创建表语法】

CREATE TABLE 命令功能 CREATE TABLE命令通过指定带有表属性的字段列表来创建Hudi Table。 命令格式 CREATE TABLE [ IF NOT EXISTS] [database_name.]table_name[ (columnTypeList)]USING hudi[ COMMENT table_comment ][ LOCATION location_path ][ OPTIONS (options_lis…

蓝桥杯备考:动态规划路径类DP之矩阵的最小路径和

如题&#xff0c;要求左上角到右下角的最短路径&#xff0c;我们还是老样子按顺序做 step1:确定状态表示 f[i][j]表示(1,1)到(i,j)的最短距离 step2 :推导状态表达方程 step3:确定填表顺序&#xff0c;应该是从上到下&#xff0c;从左到右 step4:初始化 step5 找结果&#…

【Maven】基于IDEA学习 Maven依赖 与 工程继承、聚合关系

文章目录 一、基于IDEA 进行Maven依赖管理1. 依赖管理概念2. Maven工程核心信息配置和解读&#xff08;GAVP&#xff09;3. Maven工程依赖管理配置依赖管理和依赖添加依赖版本统一提取和维护 4. 依赖范围5. Maven工程依赖下载失败错误解决6. Maven工程Build构建配置指定打包命名…

微信小程序注册组件

在微信小程序中注册组件分为自定义组件的创建和全局/局部注册&#xff0c;下面为你详细介绍具体步骤和示例。 自定义组件的创建 自定义组件由四个文件组成&#xff0c;分别是 .js&#xff08;脚本文件&#xff09;、.json&#xff08;配置文件&#xff09;、.wxml&#xff08…

贪心算法二

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是贪心算法&#xff0c;并且掌握贪心算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! >…

react中的fiber和初次渲染

源码中定义了不同类型节点的枚举值 组件类型 文本节点HTML标签节点函数组件类组件等等 src/react/packages/react-reconciler/src/ReactWorkTags.js export const FunctionComponent 0; export const ClassComponent 1; export const IndeterminateComponent 2; // Befo…

Wireshark的OSPF报文抓包和分析(单区域ospf实验)

一、OSPF的5种数据包和7种状态机制 数据包 Hello&#xff1a;发现、建立邻居&#xff08;邻接&#xff09;关系、维持、周期保活&#xff1b;存在全网唯一的RID&#xff0c;使用IP地址表示 DBD&#xff1a;本地的数据库的目录&#xff08;摘要&#xff09;&#xff0c;LSDB的…

前后分离文件上传案例,前端HTML,后端Net6开发的webapi(完整源代码)下载

文件上传功能在项目开发中非常实用&#xff0c;本案例前端用HTML页面的form表单实现&#xff0c;后端用Net6实现。 前后分离文件上传案例&#xff0c;前端HTML&#xff0c;后端Net6&#xff08;完整源代码&#xff09; 下载链接https://download.csdn.net/download/luckyext/9…

Linux之命令记录【一】

文章目录 前言几个重要的热键1.[Tab]按键2.[Ctrl]-c 按键3.[Ctrl]-d 按键4.[shift]{[PageUP]|[Page Down]}按键 线上求助&#xff08;查看帮助信息&#xff09;1. --help2.man page3.info page 用户身份1.su 基础指令1.date2.cal3.bc 系统字符集相关1.locale 文本编辑器1.nano …

Unity HDR颜色、基础颜色、强度强度、HDR面板Intensity之间的相互转换

目录 前言&#xff1a; 一、UnityHDR面板的规律 二、HDR与基础颜色转换&#xff0c;HDR强度获取&#xff0c;输入设置强度获取 1.基础色->HDR颜色 2.HDR颜色->基础色 3.获取HDR颜色在面板中的强度 4.获取HDR颜色在面板设置输入时的强度 前言&#xff1a; HDR&#…

T41LQ专为人工智能物联网(AIoT)应用设计,适用于智能安防、智能家居、机器视觉等领域 软硬件资料+样品测试

君正&#xff08;Ingenic&#xff09;T系列芯片涵盖多个型号&#xff0c;每个型号根据不同应用需求提供了多个版本。以下是各型号及其主要版本&#xff1a; 1. T23系列&#xff1a; T23N&#xff1a;标准版&#xff0c;适用于移动摄像机、安全监控、视频通话和视频分析等应用…

高频 SQL 50 题(基础版)| 高级字符串函数 / 正则表达式 / 子句:1667. 修复表中的名字、1527. 患某种疾病的患者、196. 删除重复的电子邮箱、176. 第二高的薪水、...

高级字符串函数 / 正则表达式 / 子句 1667. 修复表中的名字 题目链接&#xff1a;1667. 修复表中的名字 状态&#xff1a;学会了 思路&#xff1a; 要求修复名字&#xff08;首字母大写&#xff0c;其他字母小写&#xff09;&#xff0c;按顺序返回。 想法就是取出名字这一列&…