package main import( "fmt" "math/rand" "time" ) func main() { //数组的几种定义方式 var arr1 [3]int = [3]int{1,2,3} var arr2 = [3]int{4,5,6} arr3 := [3]string{"h", "w", "z"} var arr4 = [...]int{1,2,3} //[...]固定写法 var arr5 = [...]string{1:"zhangsan", 0:"lisi", 2:"wangwu"} //能够指定数组下标 fmt.Printf("arr1 = %v, type %T\n", arr1, arr1) fmt.Printf("arr2 = %v, arr2[0]的地址%p\n", arr2, &arr2[0]) fmt.Printf("arr3 = %v, arr3 %p, arr3[2]的地址%p\n", arr3, &arr3, &arr3[2]) //for遍历数组 for i := 0; i < len(arr4); i++ { fmt.Printf("arr 第%v个元素的值%v\n", i, arr4[i]) } fmt.Println(arr5) //for range 遍历 //for _,v := range arr 这样只关心 v值; 不关心i下标 for i,v := range arr5 { fmt.Printf("i = %v, v = %v\n", i, v) } //细节 var testArr [3]int //一旦定义了数组类型以及长度;之后就是不能动态改变 testArr[0] = 1 testArr[1] = 2 //testArr[3] = 2.1 //此时要报错 类型不正确 //testArr[4] = 4 //越界也不行 fmt.Println(testArr) //默认值 数字(整型,浮点)是0,string 是空字符串,bool 是false var testIntArr [3]float32 var testStrArr [3]string var testBoolArr [3]bool //intarr = [0 0 0], strArr = [ ], boolArr = [false false false] fmt.Printf("intarr = %v, strArr = %v, boolArr = %v\n", testIntArr, testStrArr, testBoolArr) //数组是值传递 tv := [3]int{1,2,3} testValArr(tv) //1,2,3 没有改变 fmt.Println(tv) //能够经过指针来引用传递 testPointArr(&tv) //此时就改变了tv的值了 11,2,3 fmt.Println(tv) //数组长度也是数组类型的一部分,若是长度不等至关于不同的类型 //tv2 := [2]int{1,2} //testValArr(tv2) //此时是要报错的由于函数接收3个长度的 //tv3 := [...]int{1,2,3,4} //这个也是经过不了 //testValArr(tv3) //tv4 := [...]int{1,3,4} //这个是经过的 //testValArr(tv4) //输出A-Z var myByte [26]byte for i := 0; i < 26; i++ { myByte[i] = 'A' + byte(i)//须要把i转成byte类型 } for i := 0; i < 26; i++ { fmt.Printf("%c ", myByte[i]) } //求数组最大值 var maxArr [7]int = [7]int{1,3,60,-2,80,50,2} //假设数组第一个值为最大值,而后循环去比较 maxIndex := 0 maxVal := maxArr[0] for i,v := range maxArr { if maxVal < v { maxVal = v maxIndex = i } } fmt.Printf("\nmaxVal = %v, maxIndex = %v\n", maxVal, maxIndex) //求数组的平均值 avgArr := [7]int{1,2,3,20,55,11,22} sum := 0 for _,val := range avgArr { sum += val } fmt.Printf("avgArr的平均值为= %0.2f\n", float64(sum) / float64(len(avgArr))) //随机5个数,以及反转数组 var reverArr [5]int //须要一个随机种子;要不每次随机值都同样 rand.Seed(time.Now().UnixNano()) //使用纳秒 reverArrLen := len(reverArr); for i := 0; i < reverArrLen; i++ { reverArr[i] = rand.Intn(100) // 0<=n<100 } fmt.Println(reverArr); //反转思路, 第一个和最后一个交换, 第二个和倒数第二个交换,就能够确认须要交换 len(arr)/2次;值能够经过中间变量来解决 tmp := 0 //中间临时变量 for i := 0; i < reverArrLen / 2; i++ { tmp = reverArr[reverArrLen - 1 - i] //存放后面的一个值 reverArr[reverArrLen - 1 - i] = reverArr[i] //把后面一个值赋值为前面的值 reverArr[i] = tmp //前面的值赋值为后面的值 } fmt.Println(reverArr); } func testPointArr(arr *[3]int) { (*arr)[0] = 11 //(*arr)取指针的值 } func testValArr(arr [3]int) { arr[0] = 11 }
二维数组数组
package main import( "fmt" ) func main() { var arr [3][5]float64 //定义一个二维数组 for i := 0; i < len(arr); i++ { for j := 0; j < len(arr[i]); j++ { fmt.Printf("请输入第%v个班级第%v学生的成绩\n", i+1, j+1) fmt.Scanln(&arr[i][j]); } } //遍历二维数组 for i,v := range arr { var sum float64 = 0 for _,val := range v { sum += val } fmt.Printf("第%v个班级的平均成绩%v\n", i+1, sum / float64(len(arr[i]))) } }