- 1.和 C语言 一样,Go语言中也有数组的概念, Go语言中的数组也是用于保存一组相同类型的数据
- 2.和C语言一样,Go语言中的数组也分为一维数组和多维数组
-
3.C语言中定义数组的格式
int ages[3]; -
4.Go语言中定义数组的格式
var ages [3]int -
5.C语言中操作数组的格式:
ages[索引]; - 6.Go语言中操作数组的格式和C语言一样
var ages [3]int = [3]int{1, 3, 5}
// 取出数组中保存的值
fmt.Println(ages) //[1 3 5]
fmt.Println(ages[0])
fmt.Println(ages[1])
fmt.Println(ages[2])
-
7.C语言中数组的初始化方式有好几种
7.1先定义再初始化
只能逐个初始化, 不能一次性初始化
7.2定义的同时初始化
int ages[3] = {1, 3, 5} // 完全初始化
int ages[3] = {1, 3} // 部分初始化
int ages[3] = {[2] = 3} // 指定元素, 部分初始化
int ages[] = {1, 3, 5} // 如果定义的同时初始化, 元素个数可以省略
-
8.Go语言中数组的初始化方式有好几种
8.1先定义再初始化
// 1.定义一个数组 var ages [3]int // 2.给数组指定索引(下标)的元素赋值 ages[0] = 123 ages[1] = 456 ages[2] = 789
Go语言中的数组可以先定义再一次性初始化
// 1.定义一个数组 var ages [3]int // Go语言中的数组可以先定义再一次性初始化 ages = [3]int{1, 3, 5}8.2定义的同时初始化
// 1.定义的同时初始化 var ages [3]int = [3]int{1, 3, 5} // 完全初始化 //var ages [3]int = [3]int{1, 3} // 部分初始化 //var ages [3]int = [3]int{2:5} // 指定元素初始化 -
Go语言数组和C语言一样可以省略元素个数,但是有格式要求
// [...]的含义, 让编译器根据赋值的元素个数自动计算数组的元素个数
ages := [...]int{1, 3, 5} // 省略元素个数
注意点:
-
1.Go语言给数组一次性赋值的时候一定要在值的前面加上数组的类型
var 数组名称 数据类型 = 数据类型{x , y, z}
而且必须要和数据类型一模一样 - 2.C语言中的数组如果没有初始化保存的是垃圾数据, 但是 Go 语言的数组 没有初始化保存的不是垃圾数据, 而是对应类型的零值
零值:
int/int8/int16/int32/int64/uint/uint8/uint16/uint32/uint64/byte/rune/uintptr的默认值是0
float32/float64的默认值是0.0
bool的默认值是false
string的默认值是""
pointer/function/interface/slice/channel/map/error的默认值是nil
- 数组在Go语言中是 值类型 ,, 所以数组之间的 赋值是拷贝关系 , 而 不是指向的关系 (C语言数组是指向关系)
- 所以数组作为参数传递时也是值拷贝,在函数中修改数组元素值,不会影响原数组
package main
import "fmt"
func main() {
ages := [3]int{1, 3, 5}
change(ages)
fmt.Println(ages) //[1 3 5]
}
func change(nums [3]int) {
nums[1] = 666
}
- 如果想让两个数组可以相互赋值, 那么两个数组的**类型必须一致,类型一致包括元素个数, 元素个数也是Go语言中数组类型的一部分
var ages [3]int = [3]int{1, 3, 5}
var nums [3]int
nums = ages
fmt.Println(ages) //[1 3 5]
fmt.Println(nums) //[1 3 5]
- 如果数组中存储的元素类型支持== != 操作,而且两个数组的类型是一个样的, 那么数组也支持== !=操作
var ages [3]int = [3]int{1, 3, 5}
var nums [3]int = [3]int{1, 2, 5}
res := ages == nums
fmt.Println(res) //false
- Go语言中遍历数组
- 1.传统的for循环遍历数组
ages := [3]int{1, 3, 5}
for i:=0; i < 3; i++ {
//fmt.Println(ages[i]) //1 3 5
fmt.Printf("index = %d, value = %d\n", i, ages[i])
}
- 2.高级for循环来遍历数组(相当于其他语言中的forin循环)
//range函数的两个返回值变量名任取
//for i,v:=range ages{
// fmt.Println(i,v)
//}
for index, value := range ages {
fmt.Println(index, value)
}
/*
0 1
1 3
2 5
*/
-
定义二维数组的格式
var 数组名称 [行数][列数]数据类型
var 数组名称 [一维数组的个数][每个一维数组的元素个数]数据类型
var arr [2][3]int = [2][3]int{
{1,2,3},
{4,5,6},
}
fmt.Println(arr) //[[1 2 3] [4 5 6]]
- 修改数组元素方式和C语言一样
var values [2][3]int = [2][3]int{
{1, 3, 5},
{2, 4, 5},
}
values[0][1] = 666
fmt.Println(values) //[[1 666 5] [2 4 5]]
-
注意点:
二维数组也可以省略元素个数, 但是只能省略行数, 不能省略列数
//省略的元素个数必须用...代替,若[]中不写...则代表的是切片,而非数组
values := [...][3]int{
{1, 3, 5},
{2, 4, 5},
}
fmt.Println(values) //[[1 3 5] [2 4 5]]
// 这里代表定义了一个切片, 切片中保存的是数组
//values := [][3]int{
// {1, 3, 5},
// {2, 4, 5},
//}
// 这里代表定义了一个切片, 切片中保存的是切片
//values := [][]int{
// {1, 3, 5},
// {2, 4, 5},
//}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Don't Make Me Think
Steve Krug / New Riders Press / 18 August, 2005 / $35.00
Five years and more than 100,000 copies after it was first published, it's hard to imagine anyone working in Web design who hasn't read Steve Krug's "instant classic" on Web usability, but people are ......一起来看看 《Don't Make Me Think》 这本书的介绍吧!