Go 数组,定义数组,遍历数组。二维数组

demo.go(定义数组,遍历数组):

package main

import "fmt"

func main() {
	// 定义数组 (数组的长度必须是一个常量或常量表达式)
	var arr [5]int  // 元素初始值都是0(int)
	arr[0] = 111
	arr[1] = 222
	fmt.Println(arr)  // [111 222 0 0 0]  数组([]int)元素默认值是0
	fmt.Printf("%T \n", arr) // [5]int

	// 定义数组 同时为数组元素赋值
	var arr2 = [5]int{11, 22, 33}  // 可以只为前面的部分元素赋值,后面的元素默认0(int)
	//var arr2 = [5]int{2:10, 4:20}  // 也可以通过下标为指定元素赋值。
	//var arr2 = [...]int{1, 2, 3, 4} // 也可以通过[...]自动决定数组长度
	fmt.Println(arr2)  // [11 22 0 0 0]

	// len()计算数组长度
	fmt.Println(len(arr2)) // 5

	// 遍历数组
	for i:=0; i<len(arr2); i++ {
		fmt.Println(arr2[i])
	}

	// for range 遍历数组
	for index, value := range arr2 {
		fmt.Println(index, value)
	}
}

demo.go(数组的地址,数组默认深拷贝):

package main

import "fmt"

func main() {
	// 定义数组
	var arr = [...]int{11, 22, 33, 44, 55}

	// 打印数组地址
	// 整个数组的地址与数组第一个元素的地址相同
	fmt.Printf("数组地址:%p \n", &arr)  // 0xc000072030 
	fmt.Printf("数组第一个元素地址:%p \n", &arr[0]) // 0xc000072030 
	fmt.Printf("数组第二个元素地址:%p \n", &arr[1]) // 0xc000072038 (两个元素地址相差8个字节(int64类型),数组元素在内存中有序且连续地进行存储) 

	// 将数组arr的值赋给arr2 (其实是深拷贝)
	var arr2 = arr
	fmt.Printf("数组地址:%p \n", &arr2) // 0xc000072060 与第一个数组的地址不一样
	arr[0] = 1000    // 修改第一个数组中元素的值
	fmt.Println(arr2[0])  // 11 第二个数组中的元素不受第一个数组影响
}

demo.go(二维数组):

package main

import "fmt"

func main() {
	// 二维数组
	var arr [2][3]int
	arr[0][1]=11
	arr[1][2]=22
	fmt.Println(arr)  // [[0 11 0] [0 0 22]]

	// 定义二维数组 并赋值
	var arr2 = [...][3]int{{1,2,3}, {4,5,6}}
	fmt.Println(arr2)  // [[1 2 3] [4 5 6]]
}

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/88639588