4.1. 第 1节:1.1 数组
1:数组
01 数组定义和使用
package main
import "fmt"
func main0101() {
// 数组定义
// 数组是一系列相同数据类型在内存中有序存储的数据集合
// var 数组名 [元素个数]数据类型
//定义了10个整型变量的数组元素
var arr [10]int
//通过下标找到具体元素 数组下标是从0开始的 到数组元素个数-1位数值最大下标
//数组名[下标] 指向具体某一个元素
arr[0] = 123
arr[1] = 110
arr[2] = 234
arr[5] = 567
//打印数组
fmt.Println(arr)
fmt.Println(arr[0])
fmt.Println(arr[1])
fmt.Println(arr[2])
}
func main0102() {
//在定义数组时 依次为数组元素赋值
//var arr [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//在定义数组是 可以为部分元素赋值
//var arr [10]int = [10]int{1, 2, 3, 4, 5}
//在定义数组时可以指定下标赋值
//var arr [10]int = [10]int{1: 10, 4: 20, 6: 30}
//定义时写...可以根据元素个数赋值
//var arr [4]int = [...]int{1, 2, 3, 4}
arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//len(数组名)//计算数组元素个数
//fmt.Println(len(arr))
//遍历数组元素值
//for i:=0;i<len(arr);i++{
// fmt.Println(arr[i])
//}
//可以使用range 数组名变量
//i -》index 下标 v-》value 值
for _, v := range arr {
fmt.Println(v)
}
//fmt.Println(arr)
}
func main() {
//数组常见问题
//i是一个变量 数组元素个数定义一个是常量 或是常量表达式
//i:=10
//const i =10
var arr [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//var arr1 [10]int
//arr[0]=123
//数组下标越界 最大值下标:len(arr)-1
//arr[10]=321//err
//arr[-1]=321//err
//arr是数组名 表示的是一个数组
//arr=123err
//两个数组如果类型和元素个数相同可以赋值
//arr1=arr
fmt.Println(arr)
//fmt.Println(arr1)
//打印数组数据类型
fmt.Printf("%T\n", arr)
//fmt.Printf("%T\n",arr1)
//打印数组地址
//数组名表示整个数组 数组名对应的地址就是数组第一个元素的地址
fmt.Printf("数组地址:%p\n", &arr)
//fmt.Printf("数组第一个元素地址:%p\n",&arr[0])
//fmt.Printf("数组第二个元素地址:%p\n",&arr[1])
//fmt.Printf("数组第三个元素地址:%p\n",&arr[2])
//打印数组所有元素地址
for i := 0; i < len(arr); i++ {
fmt.Printf("%p\n", &arr[i])
}
}
02 十只小猪称体重
package main
import "fmt"
func main() {
var arr [10]int
//通过键盘为数组元素赋值
for i := 0; i < len(arr); i++ {
fmt.Scan(&arr[i])
}
//通过循环遍历数组
max := arr[0]
for i := 1; i < len(arr); i++ {
if arr[i] > max {
max = arr[i]
}
}
fmt.Println(max)
}
03 数组逆置
将一个字符串数组的元素的顺序进行反转。{“我”,“是”,” 好人”} {“好人”,” 是”,” 我”}。第 i 个和第 length-i-1 个进行交换。
package main
import "fmt"
func main() {
var arr [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//数组逆置
i := 0 //最小值下标
j := len(arr) - 1 //最大值下标
//for 表达式1;表达式2;表达式3{}
//for 返回值:=range 集合{}
//for 条件 {}
for i < j {
//if (i >= j) {
// //跳出循环
// break
//}
//交换数据
arr[i], arr[j] = arr[j], arr[i]
//改变下标
i++
j--
}
fmt.Println(arr)
}