go语言笔记——数组长度不可变,但是元素值是可变的!!!
数组声明的格式是:
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语言笔记——数组长度不可变,但是元素值是可变的!!!相关推荐
- c语言中数组长度的计算
c语言中数组长度的计算 一维数组 计算数组的长度: sizeof(数组名):得到这个数组占用内存的总长度 公式: sizeof(数组名) / sizeof(数组类型); 二维数 ...
- C语言在数组中找到最大的元素(附完整源码)
C语言在数组中找到最大的元素 C语言在数组中找到最大的元素完整源码(定义,实现,main函数测试) C语言在数组中找到最大的元素完整源码(定义,实现,main函数测试) #include <io ...
- C语言——计算数组长度
如何计算 C 语言数组长度 数组特点 长度固定(变长数组除外) 数组每个元素占用的字节数相同即: sizeof(a[0]) = sizeof(a[1]) = sizeof(a[n]) 一维数组 数组定 ...
- C语言中数组长度的计算详解
一. C语言中计算数组长度大小 C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用: C语言数组长度的大小可以使用: int main() {int ...
- C语言中数组长度的计算方法总结(sizeof与strlen)
最近在重新学习C语言,学习中发现之前对数组长度的计算方法模糊不清.因此做个总结. 首先要明白什么是数组. 数组是一组相同类型元素的集合. 因此,要定义一个数组,首先要确定数组内的元素是同一种类型. 1 ...
- C语言获得数组长度的函数
1.c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数). 例如: double a[] = {1,2,3,4}; int length; length=sizeof(a)/si ...
- c语言 json数组长度,js 获取json数组里面数组的长度
作为一个前端页面开发者第一次处理json数据,遇到了'js 获取json数组里面数组的长度'?竟然不知道 json没有.length属性(真是要嘲讽下自己),少壮不努力老大徒伤悲啊!以前都是去寻求男朋 ...
- c语言整形数组长度_C语言获取数组长度的几种方法
如何通过编程的手段获取某个数组的长度呢? 答案是使用关键字 sizeof. 前面说过,用 sizeof 可以获得数据类型或变量在内存中所占的字节数.同样,用 sizeof 也可以获得整个数组在内存中所 ...
- c语言整形数组长度_c语言中如何求数组长度
展开全部 1.c语言中,e5a48de588b63231313335323631343130323136353331333337613861定义数组后可以用sizeof命令获得数组的长度(可容纳元素个 ...
最新文章
- Docker入门与实践
- 想要永久远程办公?抱歉,你可能「不配」
- vue监听h5页面返回健(微信和支付宝浏览器亲测):
- ThreadPoolExecutor的一点理解 专题
- PHP:第一章——PHP中的关键字
- 全球及中国食品色素行业供应前景与发展趋势研究报告2022版
- 离散正(余)弦信号的时域与FFT变换后所得频域之间的关系(幅值和相角)
- BGP聚合as-set advertise-map
- sublime 如何使用less_Sublime Text3 使用教程
- 安卓 java 视频_安卓实战项目-动态桌面-rxjava实现搜索本地所有视频
- mysql和oracle的索引类型
- GRE蓝宝的核心词汇
- word2vec模型。该模型是用于学习文字的向量表示,称之为“word embedding”
- SimpleFOC(二)—— 快速入门 (开环控制)
- Matlab:在多行上延续长语句
- 安卓中dumpsys命令使用
- 计算机班教室布置,教室布置班级简介
- 评测:Logitech ConferenceCam CC3000e-一款出色的摇摄变焦摄像头和扬声器,适合远程工作者使用
- c++语言 幂指数,C++ pow(指数函数):求x的y次幂的值
- spotlight安装使用
热门文章
- 职中计算机应用教学方法,职中《计算机应用基础》教学心得体会
- java 设计原则_【无尽的编程之路】(java)-设计模式六大原则
- ba+ii+plus模拟+android,财务计算器(BAII PLUS)
- unity 纹理压缩格式‘_[2018.1]Unity贴图压缩格式设置
- mysql单列索引和多列索引_mysql 单列索引与多列索引
- 统计多段线长度命令_Auto CAD机械绘图入门教程11(编辑命令:延伸)
- wps中的相交_PPT中最好用的一个功能,非它莫属了~
- 计算机动画火柴人作业,(Flash期末作品综合实验报告.doc
- java架构设计和框架开发有什么区别
- python【蓝桥杯vip练习题库】BASIC-6杨辉三角形