GoLang学习笔记(十九)数组的声明及遍历

版权声明:如需转载、粘贴内容,必须在转载和粘贴文中标明文章内容出至 https://blog.csdn.net/ynzcxx/article/details/86497644

要了解数组,必须先了解一下Go的数据类型的另一种分类(上一种是非引用数据类型和引用数据类型,可以参考上一篇文章)

1、基本数据类型:整形、浮点、不二、字符串、字符
2、复合数据类型:函数与指针、数组、切片、map、list、结构体、通道

数组:素组元素可以通过索引下标来读取或者修改元素数据,索引从0开始以此类推。
素组初始化以后,大小不能更改。

声明数组的语法格式:
var 变量名 [数组长度]数据类型
这是一维数组的定义方式,数组长度必须是整数且大于0,未初始化的数组不是nil,也就是说没有空数组(与切片不同)
没有初始化的数组,int类型的默认是0,string类型的默认是" "空格,所以不会出现java的空指针异常。

初始化素组:
var nums = [3]int{1,2,3}
初始化数组中的{}中的元素不能大于[]中的数字。

如果忽略[]中的数字不设置数组大小,Go语言会根据元素的个数来设置数组的大小。
var nums = [...]int{1,2,3}
将声明中的[]数字替换为...编译器会自动计算长度。

数组的长度:
通过数组作为参数传递给len()函数,可以获得数组的长度。

一维数组的声明及遍历代码:一个标准的for循环遍历及一个range调用遍历

//声明和定义一维数组
var arr1 [3]string
var arr2 = [3]int{1, 2, 3}
var arr3 = [...]int{1, 2, 3, 4, 5}

func main() {
	arr4 := [4]string{"a", "b", "c", "d"}

	for i := 0; i < len(arr4); i++ {
		fmt.Print(arr4[i], "\t")
	}
	fmt.Print("\n")
	for _, value := range arr1 {
		fmt.Print(value, "\t")
	}
}

运行结果如下:

a	b	c	d	
			

各位看官,因为数组arr1没有进行初始化,所以结果下面是有一排空格的,动动鼠标可以看到。

二维数组:
二维数组是最简单的多维数组,二维数组本质上是由一堆一维数组组成的。

二维数组的定义方式:
var 变量名 [x][y]变量类型

二维数组的声明及遍历代码:还是一个标准的for循环遍历及一个range调用遍历

var arrayarr = [3][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}

func main() {
	for i := 0; i < len(arrayarr); i++ {
		for j := 0; j < len(arrayarr[i]); j++ {
			fmt.Print(arrayarr[i][j], "\t")
		}
		fmt.Print("\n")
	}

	for _, val1 := range arrayarr {
		for _, val2 := range val1 {
			fmt.Print(val2, "\t")
		}
		fmt.Print("\n")
	}
}

运行结果:

1	2	3	4	
5	6	7	8	
9	10	11	12	
1	2	3	4	
5	6	7	8	
9	10	11	12

再来通过一段代码证明数组是非引用数据类型:

func main() {
	a := [...]string{"a", "b", "c", "d"}
	b := a
	b[0] = "x"
	fmt.Println("a:", a)
	fmt.Println("b:", b)
}

运行代码获得结果:

a: [a b c d]
b: [x b c d]

我们可以看到,当数组b改变时,并未影响到数组a,由此可以证明数组是非引用数据类型。

猜你喜欢

转载自blog.csdn.net/ynzcxx/article/details/86497644