golang学习笔记(数组)

数组

` 数组单独写一个,因为数组是go语言编程中最常用的数据结构之一,是一类数据的集合,数组包含元素个数被称为数组长度
常规数组声明

[32]byte                           //长度为32的数组,每个元素为一个字节
[2 * n] struct  (x,y  int32)       //复杂类型数组
[1000]*float64                     //指针数组
[3][5]int                          //二维数组
[2][2][2]float64                   //等同于[2]([2]([2]float64))

数组可以是多维的,这与其它语言类似,go语言数组定义长度后不可改变,声明长度时,可以使用常量,也可以使用常量表达式,数组长度是数组类型内置常量,用len(s)获取

元素获取

与其它语言相同使用下标取元素
遍历方法有两种
一种是

for i := 0; i < len(array); i++ {
	fmt.Println("Element", i, "of array is", array[i])
}

另一种是go语言提供的关键字range于是上面的便利过程可以这样写

for i, v := range array {
	fmt.Println("Array element[", i, "]=", v)
}

range有两个返回值,第一个是元素的数组下标,第二个是元素的值

值类型

go语言中,数组是一个值类型(value type).所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作.如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。

package main
import "fmt"
func modify(array [10]int) {
	array[0] = 10 // 试图修改数组的第一个元素
	fmt.Println("In modify(), array values:", array)
}
func main() {
	array := [5]int{1,2,3,4,5} // 定义并初始化一个数组
	modify(array) // 传递给一个函数,并试图在函数体内修改这个数组内容
	fmt.Println("In main(), array values:", array)
}

该程序的执行结果为:
In modify(), array values: [10 2 3 4 5]
In main(), array values: [1 2 3 4 5]
所以说modify中数组与main中传入的数组是两个不同实例

猜你喜欢

转载自blog.csdn.net/qq_17178007/article/details/88294361