Go:数组

一 数组的定义和初始化

        数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。

  • Go语言中的数组定义时长度是固定的,并且数组的元素类型必须一致。
  • 数组的长度是数组类型的一部分,因此长度不同的数组类型也是不同的
  • 数组的初始化可以在定义时完成,也可以通过索引单独赋值。

        在Go语言中,数组声明及初始化的方式有很多种,例如:

    // 1.声明一个int类型的数组,数组长度为10,再遍历数组为其赋值
	var array1 [10]int
	for i := 0; i < len(array1); i++ {
		array1[i] = i
	}
	// 2.声明一个int类型的数组,并直接初始化赋值(后面为赋值元素默认为0)
	var array2 = [10]int{1, 2, 3, 4}
	// 3.使用:=直接声明并初始化数组
	array3 := [4]int{1, 2, 3, 4}
	// 4.使用...代替数组的长度,编译器会根据元素个数自行推断数组的长度
	var array4 = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
	// 5.指定下标来初始化元素
	array5 := [5]float32{1: 2.5, 3: 7.5}

二 数组的遍历和获取元素

        在Go语言中,我们可以通过range来遍历数组元素:

    for index, value := range array2 {
		fmt.Println("inde = ", index, ",value = ", value)
	}

        当然,我们也可以通过普通的for循环进行遍历,获取元素:

    for i := 0; i < len(array1); i++ {
		fmt.Println(array1[i])
	}

        还有一种简单的方法就是直接通过数组名打印输出数组元素:

    fmt.Println(array3)

三 数组作为函数参数传递 

1.严格匹配数组类型

        在Go中,数组的长度是固定的,并且在传参的时候,严格匹配数组类型。

func printArr(arr [4]int) {
	fmt.Println(arr)
}

        例如在上面的代码中,我们将一个长度为4的int型数组作为入参,打印数组内容。当我们将arrays3(长度为4的int型数组)作为参数传递时,可以正常打印出结果

        但是如果我们将arrays2(长度为10的int型数组)作为参数传入,会报以下错误:

        原因很简单,在Go语言中,数组的长度也是数组类型的一部分。我们将数组作为参数传递时,要严格匹配数组长度和数组元素类型。

2.数组是值类型

        在Go中,数组是值类型。也就是将一个数组赋值给另一个数组,或作为参数传递时,实际是对整个数组的复制,而不是传递引用。例如,我们定义一个函数,实现修改数组的元素的功能:

    func setArr(arr [4]int) {
	    arr[2] = 100
	    fmt.Println("函数中的值:", arr[2])
    }


    setArr(array3)
	fmt.Println("查看值是否被改变:", array3[2])

        查看运行结果:

        可以看到,函数中数组元素已经发生了改变,但是原数组中对应元素并未发生改变。这就是因为数组是值类型,其作为参数传递时,是将拷贝后的数组传递了,我们在函数中进行的所有操作都是针对拷贝后的数组进行的,而非是对原数组进行的。同理,下面的代码也是一样的。

    array6 := array1
	array6[1] = 200
	fmt.Println(array1[1]) // 1
	fmt.Println(array6[1]) // 200

       因此,如果我们想要实现在函数内修改原始数组,可以通过传递数组的指针来实现。我们可以将上述代码改成:

func setArr1(arr *[4]int) {
	arr[2] = 100
	fmt.Println("函数中的值:", arr[2])
}


setArr1(&array3)
fmt.Println("查看值是否被改变:", array3[2])

        这时的运行结果就是我们想要的啦:

四 多维数组

        Go语言中的多维数组与C语言相似:

var matrix [3][4]int           // 定义一个3x4的二维整数数组
matrix[1][2] = 7              // 修改第二行第三列的元素为7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值