我是靠谱客的博主 温柔铃铛,最近开发中收集的这篇文章主要介绍Go核心开发学习笔记(十七) —— 数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数组与C差不多 array,切片是独有 slice

数组

  1. 数组在Golang中为值类型,定义方法如下:

var intArray [3]int //定义一个整型数组,包含三个元素,其中下标为0,1,2
var flArray [3]float64 //定义一个float64型数组,包含三个元素,初始值都是0
var intArray [3]int = [3]int{10,20,30} //定义一个整形数组,包含三个元素并赋值
var intArray [3]string = [3]string{“Kobe”,“Durant”,“James”} //定义一个字符串数组并赋值
var intArray [3]string = [3]string{0:“Kobe”:2:“Durant”:1:“James”} //定义一个字符串数组并赋值,通过下标表明对应的值是什么

var intArray [3]int
intArray[0] = 10
intArray[1] = 20
intArray[2] = 30 //或者这样赋值
var arr []int //!!!这个不是数组,是切片slice
var intArray1 = […]int{10,20,30} //让系统自己识别吧,跟函数中参数 args… 一样,三个点必不可少

  1. 数组在内存中开辟的一块儿连续的空间,具体每个元素根据数据类型占用内存大小决定,一个数组的地址就是数组a[0]的地址
    &intArray[0] == &intArray

  2. 数组遍历: for-range结构遍历
    for _ , value := range intArray {…} //这样遍历出数组的每一个元素

  3. 数组是多个相同类型数据的组合,一旦声明长度是固定的,不能动态变化

  4. 数组[]xx,xx既可以是值类型也可以是引用类型,但是要注意必须数据类型都一致,不能由不同的数据类型组成数组,即不可混用

  5. 数组的默认值:int 0; string “”; bool false

  6. 使用数组的步骤:
    (1) 声明一个数组变量并开辟连续内存空间
    (2) 为数组赋值
    (3) 使用数组

  7. 数组下标从0开始,必须使用[foo]xx foo-1个数的下标,如果越界使用则会panic (index out of range)

  8. 数组是属于值类型,默认情况下是值传递,因此会是值拷贝,数组间不会相互影响,调用数组变量修改变量数组中某个元素的值不会影响到原数组变量

  9. 如果希望通过被调用函数修改数组变量,那就直接赋予被调用函数指针数组变量,通过修改 *(array)[0] = xx 的方式改变数组变量

  10. Go中长度是数组类型的一部分,如果一个函数接收数组变量作为形参,那么实参一定要和形参对数组的长度一致,即[n]int中的n一定要等长

数组案例

案例一:创建一个26字母的byte类型数组,分别放置A-Z,使用for循环访问并将它们打印出来。

package main
import "fmt"
func main() {
var myChars [26]byte
for i := 0 ; i <= 25 ; i++ {
myChars[i] = 'A' + byte(i)
}
for i := 0 ; i<= 25 ; i++ {
fmt.Printf("%c",myChars)
}
}

案例二:求一个数组中最大值那个数和下标

package main
import "fmt"
func main() {
/*
思路:一个数组中假设array[0]为最大,下标即为0,初始化变量值;
这时从数组中第二个数,也就是下标为1的数开始,for循环逐一比较,凡是比0大,那么我就直接修改初始值为当前下标和对应的值
*/
var array = [...]int{10,20,-1,90,220}
maxValue := array[0]
maxIndex := 0
for i :=1 ; i < len(array) ; i++ {
if maxValue < array[i] {
maxValue = array[i]
maxIndex = i
}
}
fmt.Printf("最大值的下标为%v,最大值为%v",maxIndex,maxValue)
}

案例三:求一个数组中所有值的和,和平均值,for-range

package main
import "fmt"
func main() {
/*
只要要把遍历的数组中的值做一个累加即可
*/
var array = [...]int{10,20,-1,90,220}
sum := 0
for _ , value := range array {
sum += value
}
fmt.Printf("和为%vn",sum)
fmt.Printf("平均数为%vn",float64(sum) / float64(len(array)))
// 凡是涉及到平均值包含小数的情况,最后一定要保证除数和被除数都是一个数据类型
}

案例四:随机生成五个数,并将其反转打印

package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
/*
生成五个随机数需要使用rand.intn()函数,但由于存在seed不变情况,所以需要使用时间函数来使seed随时在变化,保证随机数每次不一致
*/
var intArray [5]int
//记得seed变化一定是纳秒最好,因为秒有些时候因为操作在1秒内,完全有可能一致,所以Unix()不推荐
rand.Seed(time.Now().UnixNano())
for i := 0 ; i < len(intArray) ; i++ {
intArray[i] = rand.Intn(100)
}
fmt.Println(intArray)
/*
交换次数: len(intArray) / 2
无论奇数还是偶数,因为整数的除法是取模
*/
temp := 0
for i := 0 ; i < len(intArray) / 2 ; i++ {
temp = intArray[len(intArray) - 1 - i]
intArray[len(intArray) - 1 - i] = intArray[i]
intArray[i] = temp
}
fmt.Println(intArray)
}

最后

以上就是温柔铃铛为你收集整理的Go核心开发学习笔记(十七) —— 数组的全部内容,希望文章能够帮你解决Go核心开发学习笔记(十七) —— 数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部