Go语言中的数组(九)
我刚接触go语言的数组时,有点不习惯,因为相对于JavaScript这样的动态语言里的数组,go语言的数组写起来有点不爽。
定义数组
go语言定义数组的格式如下:
var a []int var 数组名 [数组长度]数组每一项的类型
初始化数组时,要定义好数组的长度和数组值的类型。注意定义数组时,数组的长度数字应该是常量,如果使用变量来定义长度则会报错:
var l =
var a [l]int // 此时长度使用变量 l 来定义,会报错
同时,不同的数组长度和类型,导致最终的数组也是不同的类型:
var a []int
var b []int // a 和 b 是不同的类型
数组赋值时是用 {},这点也是我最不习惯的地方:
func main() {
var a []int
a = []int{,,}
fmt.Println(a) // [1 2 3]
}
注意打印的结果是中括号的,但是没有用 , 来隔开每一项。
上面是先定义再赋值的,有点繁琐,可以一步到位地简写:
func main() {
a := []int{,,}
fmt.Println(a)
}
有时,我们一开始不知道数组的长度应该是多少,此时可以这样定义数组:
func main() {
a := [...]int{1,2,3}
fmt.Println(a)
}
// 用 ... 来表示未知的数组长度
同时,我们在初始化数组时也可以指定对应下标的值:
func main() {
a := [...]int{:,:}
fmt.Println(a) // [0 0 10 0 0 12]
}
代码中在定义数组时,指定下标2位置上的值是10,下标5位置上的值是12,其余未指定值的默认为0
遍历数组
使用for 循环来遍历数组:
func main() {
a := [...]int{,,,,}
for i:=;i<;i++{
fmt.Println(a[i])
}
}
// a[i] 是数组取值,格式:数组名[下标]
也可以使用 range 来遍历:
func main() {
a := [...]int{,,,,}
for _,v := range a{
fmt.Println(v)
}
}
// _ 是占位,此位置本来是下标,此处不用下标所以用 _ 占位
二维数组
二维数组的定义如下:
func main() {
a:=[][]int{
[]int{,},
[]int{,},
[]int{,},
}
fmt.Println(a) // [[1 2] [3 4] [5 6]]
}
可以看到这样是比较繁琐的,其实可以简化为:
func main() {
a:=[][]int{
{,},
{,},
{,},
}
fmt.Println(a) // [[1 2] [3 4] [5 6]]
}
如果你细心你会发现,我在最后一项后面加上了逗号,这是因为go语言的格式限制,这样收起花括号就不用加逗号了:
func main() {
a:=[][]int{
{,},
{,},
{,}}
fmt.Println(a)
}
数组是值类型
没错,在go中数组是值类型,这与我之前接触到的一些动态语言可完全不一样。关于值类型和引用类型,我就不多说了。直接来看下例子吧:
package main
import "fmt"
func main() {
var a = []int{,,}
var b = a
a[] =
fmt.Printf("a:%v,b:%v",a,b) // a:[4 2 3],b:[1 2 3]
}
Go语言中的数组(九)的更多相关文章
- go语言中的数组切片:特立独行的可变数组
go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...
- Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针)
the-way-to-go_ZH_CN/07.1.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...
- Go语言中底层数组和切片的关系以及数组扩容规则
Go语言中底层数组和切片的关系以及数组扩容规则 demo package main import ( "fmt" ) func main() { // 声明一个底层数组,长度为10 ...
- C语言中动态分配数组
如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老师说是不可以的.后来又问了一位教C++的老师,他告诉我在C++里用new可以做到,一直不用C++,所以也不明白.今天在逛 ...
- C语言中的数组和指针以及字符串
数组名同时也是该数组首元素的地址,而指针提供了一种用来使用地址的符号方法,因此指针能够很有效地处理数组. 将一个整数加给指针,这个整数会和指针所指类型的字节数相乘,然后所得的结果会加到初始地址上 da ...
- 【转】C语言中动态分配数组
原文地址:http://blog.chinaunix.net/uid-11085590-id-2914577.html 如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老 ...
- c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式
char *c[]={"ONE","TWO","THREE","FOUR"}; // c语言中定义了一个字符串数组(也称 ...
- C语言中的数组与字符串
1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...
- C语言中的数组的使用——混乱的内存管理
在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy. 这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第 ...
随机推荐
- 51 Nod 1072 威佐夫游戏
https://baike.baidu.com/item/%E5%A8%81%E4%BD%90%E5%A4%AB%E5%8D%9A%E5%BC%88/19858256?fr=aladdin&f ...
- 2019暑假集训 windy数
题目描述 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为2的正整数被称为 Windy 数. Windy 想知道,在A和B之间,包括A和B,总共有多少个 Windy 数? 输 ...
- vue-cli3项目中引入jquery 以及如何引进bootstrap
1.安装jquery npm install jquery --save 2.或则在package.json中指定版本号,然后运行npm install命令 "dependencies&qu ...
- ngx_http_auth_request自用
server { listen 80; server_name www.php12.cn php12.mama1314.com; root /var/www/shf; location / { ind ...
- Miller Robin大素数判定
Miller Robin算法 当要判断的数过大,以至于根n的算法不可行时,可以采用这种方法来判定素数. 用于判断大于2的奇数(2和偶数需要手动判断),是概率意义上的判定,因此需要做多次来减少出错概率. ...
- Java集合框架系列大纲
###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...
- python3 selenium使用
其实这个就相当于模拟人的点击事件来连续的访问浏览器.如果你玩过王者荣耀的话在2016年一月份的版本里面就有一个bug. 安卓手机下载一个按键精灵就可以在冒险模式里面设置按键,让手机自动玩闯关,一局19 ...
- Inter IPP 处理图像数据的方法
Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能. opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下: int main(int argc, ch ...
- JVM-GC算法(二)-复制算法&&标记整理算法
这次我和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一篇在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算法 ...
- leetcode324 摆动排序II
1. 首先考虑排序后交替插入 首尾交替插入,这种方法对于有重复数字的数组不可行: class Solution { public: void wiggleSort(vector<int> ...