数组声明的格式是:

var identifier [len]type

例如:

var arr1 [5]int

在内存中的结构是:

对索引项为 i 的数组元素赋值可以这么操作:arr[i] = value,所以数组是 可变的。

由于索引的存在,遍历数组的方法自然就是使用 for 结构:

IDIOM:

for i:=0; i < len(arr1); i++{arr1[i] = ...
}

也可以使用 for-range 的生成方式:

IDIOM:

for i,_:= range arr1 {
...
}

在这里i也是数组的索引。当然这两种 for 结构对于切片(slices)(参考 第 7 章)来说也同样适用。

问题 7.1 下面代码段的输出是什么?

a := [...]string{"a", "b", "c", "d"} for i := range a { fmt.Println("Array item", i, "is", a[i]) }

Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针),所以可以通过 new() 来创建: var arr1 = new([5]int)

那么这种方式和 var arr2 [5]int 的区别是什么呢?arr1 的类型是 *[5]int,而 arr2的类型是 [5]int

这样的结果就是当把一个数组赋值给另一个时,需要在做一次数组内存的拷贝操作。例如:

arr2 := *arr1
arr2[2] = 100

这样两个数组就有了不同的值,在赋值后修改 arr2 不会对 arr1 生效。

所以在函数中数组作为参数传入时,如 func1(arr2),会产生一次数组拷贝,func1 方法不会修改原始的数组 arr2。

如果你想修改原数组,那么 arr2 必须通过&操作符以引用方式传过来,例如 func1(&arr2),下面是一个例子

示例 7.2 pointer_array.go:

package main
import "fmt"
func f(a [3]int) { fmt.Println(a) } func fp(a *[3]int) { fmt.Println(a) } func main() { var ar [3]int f(ar) // passes a copy of ar fp(&ar) // passes a pointer to ar }

输出结果:

[0 0 0]
&[0 0 0]

另一种方法就是生成数组切片并将其传递给函数(详见第 7.1.4 节)。

摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/07.1.md

转载于:https://www.cnblogs.com/bonelee/p/6861977.html

go语言笔记——数组长度不可变,但是元素值是可变的!!!相关推荐

  1. c语言中数组长度的计算

    c语言中数组长度的计算 一维数组 计算数组的长度:       sizeof(数组名):得到这个数组占用内存的总长度       公式: sizeof(数组名) / sizeof(数组类型); 二维数 ...

  2. C语言在数组中找到最大的元素(附完整源码)

    C语言在数组中找到最大的元素 C语言在数组中找到最大的元素完整源码(定义,实现,main函数测试) C语言在数组中找到最大的元素完整源码(定义,实现,main函数测试) #include <io ...

  3. C语言——计算数组长度

    如何计算 C 语言数组长度 数组特点 长度固定(变长数组除外) 数组每个元素占用的字节数相同即: sizeof(a[0]) = sizeof(a[1]) = sizeof(a[n]) 一维数组 数组定 ...

  4. C语言中数组长度的计算详解

    一. C语言中计算数组长度大小 C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用: C语言数组长度的大小可以使用: int main() {int ...

  5. C语言中数组长度的计算方法总结(sizeof与strlen)

    最近在重新学习C语言,学习中发现之前对数组长度的计算方法模糊不清.因此做个总结. 首先要明白什么是数组. 数组是一组相同类型元素的集合. 因此,要定义一个数组,首先要确定数组内的元素是同一种类型. 1 ...

  6. C语言获得数组长度的函数

    1.c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数). 例如: double a[] = {1,2,3,4}; int length; length=sizeof(a)/si ...

  7. c语言 json数组长度,js 获取json数组里面数组的长度

    作为一个前端页面开发者第一次处理json数据,遇到了'js 获取json数组里面数组的长度'?竟然不知道 json没有.length属性(真是要嘲讽下自己),少壮不努力老大徒伤悲啊!以前都是去寻求男朋 ...

  8. c语言整形数组长度_C语言获取数组长度的几种方法

    如何通过编程的手段获取某个数组的长度呢? 答案是使用关键字 sizeof. 前面说过,用 sizeof 可以获得数据类型或变量在内存中所占的字节数.同样,用 sizeof 也可以获得整个数组在内存中所 ...

  9. c语言整形数组长度_c语言中如何求数组长度

    展开全部 1.c语言中,e5a48de588b63231313335323631343130323136353331333337613861定义数组后可以用sizeof命令获得数组的长度(可容纳元素个 ...

最新文章

  1. Docker入门与实践
  2. 想要永久远程办公?抱歉,你可能「不配」
  3. vue监听h5页面返回健(微信和支付宝浏览器亲测):
  4. ThreadPoolExecutor的一点理解 专题
  5. PHP:第一章——PHP中的关键字
  6. 全球及中国食品色素行业供应前景与发展趋势研究报告2022版
  7. 离散正(余)弦信号的时域与FFT变换后所得频域之间的关系(幅值和相角)
  8. BGP聚合as-set advertise-map
  9. sublime 如何使用less_Sublime Text3 使用教程
  10. 安卓 java 视频_安卓实战项目-动态桌面-rxjava实现搜索本地所有视频
  11. mysql和oracle的索引类型
  12. GRE蓝宝的核心词汇
  13. word2vec模型。该模型是用于学习文字的向量表示,称之为“word embedding”
  14. SimpleFOC(二)—— 快速入门 (开环控制)
  15. Matlab:在多行上延续长语句
  16. 安卓中dumpsys命令使用
  17. 计算机班教室布置,教室布置班级简介
  18. 评测:Logitech ConferenceCam CC3000e-一款出色的摇摄变焦摄像头和扬声器,适合远程工作者使用
  19. c++语言 幂指数,C++ pow(指数函数):求x的y次幂的值
  20. spotlight安装使用

热门文章

  1. 职中计算机应用教学方法,职中《计算机应用基础》教学心得体会
  2. java 设计原则_【无尽的编程之路】(java)-设计模式六大原则
  3. ba+ii+plus模拟+android,财务计算器(BAII PLUS)
  4. unity 纹理压缩格式‘_[2018.1]Unity贴图压缩格式设置
  5. mysql单列索引和多列索引_mysql 单列索引与多列索引
  6. 统计多段线长度命令_Auto CAD机械绘图入门教程11(编辑命令:延伸)
  7. wps中的相交_PPT中最好用的一个功能,非它莫属了~
  8. 计算机动画火柴人作业,(Flash期末作品综合实验报告.doc
  9. java架构设计和框架开发有什么区别
  10. python【蓝桥杯vip练习题库】BASIC-6杨辉三角形