数组
var hens [6]float64
命名格式: var 数组名 [大小]类型
数组名的地址就是数组的地址就是数组首元素的地址
初始化数组方式:
var numArr = [3]int{1,2,3}
var numArr01 = [...]int{1,2,3,4}
var strArr = [...]string{1:"tom",2:"ok~"}
var hens [3]string = [3]string{ , , }
数组的遍历
for - range
for index,value := range arrge01{
//其中的index和value是不固定的,可以自己命名
}
说明:
- 第一个返回值index是数组arrge01的下标
- 第二个value是在该index的下标的数值
- index与value都是
局部变量
- 假如不需要下标可以用“_”忽略
注意事项和细节说明:
- var arr []int 这时的arr表示的是一个切片
- 数组钟的元素可以是任何数据类型包括值类型和引用类型,但是不能混用
- golang中数组属于值类型,在默认的情况下是发生值传递
- 长度是数组的一部分,在传递函数参数时,余姚考虑数组的长度
练习:
1.打印A~Z
func main(){
//1.打印A~Z
var strnum [26]byte
for i:=0;i<26;i++{
strnum[i] = 'A' + byte(i)
}
for i:=0;i<26;i++{
fmt.Printf("%c ",strnum[i])
}
2.输出数组中最大的值和最大的值下标:
var numbers = [...]int{2,34,46,234,57,21,3,46,24}
var maxvalue int =numbers[0]
var maxindex int = 0
for i:=1;i<len(numbers);i++{
if numbers[i] > maxvalue{
maxvalue = numbers[i]
maxindex = i
}
}
fmt.Printf("maxvalue = %d maxindex = %d",maxvalue,maxindex)
3.输出一个数组的和与它的平均值:
var numbers01 = [...]int{2,34,46,234,57,21,3,46,24}
var sum int
for _,value := range numbers01{
sum +=value
}
fmt.Printf("数组和为 %d 数组平均值为 %0.1f",
sum,float64(sum) / float64(len(numbers01)))
数组反转:
这里涉及到一个随机变量的生成:
- 生成五个随机数:
rand.Intn() - 将五个随机数放入到数组中
- 将数字倒换:
package main
import (
"fmt"
"math/rand"
"time"
)
func main(){
//数组反转
rand.Seed(time.Now().UnixNano())//种一个时间种子
var arr01 [7]int//定义数组
for i:=0;i<len(arr01);i++{
arr01[i] = rand.Intn(100)//rand.Intn(100)在0~100内(不等于100)内随机取值
}
fmt.Println("前 :",arr01)
len := len(arr01)
for i:=0;i<len / 2;i++{
var tem int = 0
tem =arr01[i]
arr01[i] = arr01[len-1-i]
arr01[len-1-i] = tem
}
fmt.Println("后 :",arr01)
//对就是这样子的欧克~
}
切片:
基本介绍:
- 切片的英文是slice
- 切片是数组的
引用
,因此slice是引用类型 - slice和数组相识,遍历slice、访问slice元素、以及长度len(slice)都是一样
的 - slice的长度是动态变化的,因此切片是一个动态数组
- 基本语法
var 变量名 []数据类型
ex: var arr []int
切片的基本使用
var intArr [5]int = {11,22,33,44,55}
//定义:
slice := intArr[1:3]
/*slice是切片名
intArr[1:3]表示的是引用下标为1值到3(不等于三) */
切片在内存中的存在形式:
- slice是引用类型
- slice 从底层来说是一个结构体:
type slice struct{
ptr *[2]int
len int
cap int
}
切片的使用:
-
定义一个数组,再通过引用创建好的数组
-
运用make来创造切片:
var 变量名 []type = make([]type,len,cap)
//通过make方式创建的切片数组为make底层维护,外界是不可看的
- 定义一个切片,直接指定具体数组
var strslice []string = []string{"tom","jeck","mary"}
切片遍历与数组相同