细说Go语言数组 (2)

要解决这个问题,我们要先给索引0分配内存,然后再进行赋值修改。

arr := [5]*int{1: new(int), 3:new(int)} arr[0] =new(int) *arr[0] = 2 fmt.Println(*arr[0]) 函数间传递数组

在Go中,数组也是值类型,所以在函数间传递变量时,么就会整个复制,并传递给函数,如果数组非常大,比如长度100多万,那么这对内存是一个很大的开销。

func main() { array := [5]int{1: 2, 3:4} //[0 2 0 4 0] modify(array) fmt.Println(array) //[0 2 0 4 0] } func modify(a [5]int){ a[1] = 3 }

通过上面的例子,可以看到,数组是复制的,原来的数组没有修改。我们这里是5个长度的数组还好,如果有几百万怎么办,有一种办法是传递数组的指针,这样,复制的大小只是一个数组类型的指针大小。

func main() { array := [5]int{1: 2, 3:4} //[0 2 0 4 0] modify(&array) fmt.Println(array) //[0 333 0 4 0] } func modify(a *[5]int){ a[1] = 333 }

这里注意,数组的指针和指针数组是两个概念,数组的指针是*[5]int,指针数组是[5]*int,注意*的位置。

数组使用注意事项

数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。

数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。

数组创建后,如果没有赋值,有默认值

数值类型数组:默认值为0

字符串类型数组:默认值为""

bool数组: 默认值为false
指针数组: 默认值nil

使用数组的步骤:1.声明数组并开辟空间2.给数组各个元素赋值3.使用数组

数组的下标从0开始

数组下标必须在指定范围内使用,否则报panic:数组越界

Go的数组属于值类型 ,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响

如果想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)

长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspjxs.html