当前位置: 首页 > news >正文

golang学习笔记16-数组

注:本人已有C,C++,Python基础,只写本人认为的重点。
C/C++和go最大的区别之一是前者数据类型写在变量名前,可读性强,后者却写在后面,可读性不太好,本人到现在还是不习惯。那么数组也是一样,除了数据类型位置不同,其他基本和C/C++一样,当然,有两个重要区别,一个是声明,一个是数组的数据类型。
1.声明:直接看代码

package mainimport "fmt"func main() {// 第一种:显式指定数组长度和元素// 这里我们创建一个长度为3的整数数组 arr1,并且在初始化时直接给出元素的值。// 注意,数组长度是固定的,因此 arr1 只能存储3个整数。var arr1 [3]int = [3]int{3, 6, 9}// 输出 arr1 的值fmt.Println(arr1)// 第二种:省略数组长度的声明// 在这种情况下,我们依然创建了一个长度为3的数组 arr2,但是没有明确写出数组长度。// Go 会根据初始化的元素数量自动推断出数组的长度。var arr2 = [3]int{1, 4, 7}// 输出 arr2 的值fmt.Println(arr2)// 第三种:使用省略号(...)自动推断长度// 这里使用省略号来声明数组,Go 会根据提供的元素数量自动确定数组长度。// 在这个例子中,arr3 的长度为4,因为我们提供了4个元素。var arr3 = [...]int{4, 5, 6, 7}// 输出 arr3 的值fmt.Println(arr3)// 第四种:使用索引初始化数组// 这里我们使用索引来初始化数组的特定元素。在这个例子中,我们定义了一个长度为4的数组 arr4。// 通过指定索引(例如 0, 1, 2, 3)来为每个元素赋值。// 这种方式可以在初始化时对数组的元素进行乱序赋值。var arr4 = [...]int{0: 33, 1: 99, 3: 88}// 输出 arr4 的值fmt.Println(arr4) //未初始化的地方默认为0,还记得吗?
}

二维数组也是差不多的,只不过方括号多了一个,花括号嵌套了,其余和C/C++一样。
2.数据类型:C/C++中,数组是引用类型,数组传入一个函数,在该函数中被更改,原数组也会改变,而go中的数组是值类型,只会传入副本,不会改变原值。解决方法很简单,用指针即可。示例如下:

package mainimport "fmt"// 函数接收数组的副本(值传递)
func modifyArray(arr [3]int) {arr[0] = 100 // 修改副本,不会影响原数组fmt.Println("Inside modifyArray (after modification):", arr)
}// 函数接收数组的指针(引用传递)
func modifyArrayWithPointer(arr *[3]int) {arr[0] = 200 // 修改原数组,或者写成(*arr)[0]fmt.Println("Inside modifyArrayWithPointer (after modification):", *arr)
}func main() {// 初始化数组originalArray := [3]int{1, 2, 3}// 通过值传递的方式fmt.Println("Before modifyArray:", originalArray)modifyArray(originalArray)                       // 传递的是副本fmt.Println("After modifyArray:", originalArray) // 原数组未改变// 通过指针传递的方式fmt.Println("\nBefore modifyArrayWithPointer:", originalArray)modifyArrayWithPointer(&originalArray)                      // 传递数组的指针fmt.Println("After modifyArrayWithPointer:", originalArray) // 原数组已改变
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [ffmpeg] packet
  • Vue路由vue-router的简单用法
  • 结构设计模式 -装饰器设计模式 - JAVA
  • 技术美术百人计划 | 《5.1.2 PBR-基于物理的相机》笔记
  • 百易云资产管理运营系统 ticket.edit.php SQL注入漏洞复现
  • 前端基于Rust实现的Wasm进行图片压缩的技术文档
  • 网络分段:您需要了解的一切
  • WEB攻防-JavaWweb项目JWT身份攻击组件安全访问控制
  • Java的cnum类型
  • Zabbix 6.4添加中文语言
  • 第一次见到要主动降薪的。。。
  • 【Vue系列五】—Vue学习历程的知识分享!
  • Qt上下文菜单
  • docker快速部署zabbix
  • 开源UNI-SOP云统一认证平台
  • 【node学习】协程
  • 11111111
  • Angular 响应式表单之下拉框
  • CentOS7简单部署NFS
  • Go 语言编译器的 //go: 详解
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript对象详解
  • java多线程
  • js中forEach回调同异步问题
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • MaxCompute访问TableStore(OTS) 数据
  • miaov-React 最佳入门
  • Python学习笔记 字符串拼接
  • 搞机器学习要哪些技能
  • 排序(1):冒泡排序
  • 前端js -- this指向总结。
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端知识点整理(待续)
  • 如何编写一个可升级的智能合约
  • 无服务器化是企业 IT 架构的未来吗?
  • 小而合理的前端理论:rscss和rsjs
  • 智能合约Solidity教程-事件和日志(一)
  • Java数据解析之JSON
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 如何正确理解,内页权重高于首页?
  • ​马来语翻译中文去哪比较好?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • # 职场生活之道:善于团结
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (一)Java算法:二分查找
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET MVC 验证码
  • .net 连接达梦数据库开发环境部署
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换