Go 语言编程 — 高级数据类型 — 数组

举报
云物互联 发表于 2021/08/06 00:50:53 2021/08/06
【摘要】 目录 文章目录 目录数组定义数组数组与切片的区别访问数组元素多维数组初始化二维数组访问二维数组 向函数传递数组指针数组 数组 数组是具有相同数据类型的一组已编号且长度固定的数据项序列,可以是任意的原始数据类型也可以是自定义的数据类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。...

目录

数组

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

在这里插入图片描述

定义数组

Golang 数组声明需要指定元素类型及元素个数,使用中括号 [] 来进行声明,格式如下:

// 声明
var variable_name[SIZE] variable_type

// 初始化
var balance = [5]float32 {1000.0, 2.0, 3.4, 7.0, 50.0}

  
 

示例:

package main

import "fmt"

func main() { var balance[5] int balance = [5]int {1000, 2, 3, 17, 50} // 或者简写为: // var balance = [5]int {1000, 2, 3, 17, 50} for i := 0; i < 5; i++ { fmt.Println(balance[i]) }
}

  
 

注意,初始化数组中 {} 中的元素个数不能大于 [] 中的数字。

数组与切片的区别

Golang 只是省略指定元素的个数,使用 [...][] 来表示,创建一个特殊的 “数组”,编译器会根据元素的个数来设置 “数组” 的大小。需要注意的是,当我们不指定元素个数的时候,实际上创建的是切片数据类型,而非数组,因为 Golang 中定义的数组,其长度总是固定的。

var balance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
// or
var balance = []float32 {1000.0, 2.0, 3.4, 7.0, 50.0}

  
 

访问数组元素

数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:

  • 更改指定元素的数值:
balance[4] = 50.0

  
 
  • 读取指定元素的数值:
var salary float32 = balance[9]

  
 

示例:

package main

import "fmt"

func main() { var n[10] int for i := 0; i < 10; i++ { n[i] = i + 100 } for j := 0; j < 10; j++ { fmt.Printf("Element[%d] = %d\n", j, n[j]) }
}

  
 

结果:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

  
 

多维数组

多维数组定义格式:

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

  
 

二维数组是常见的多维数组类型,定义方式如下:

var arrayName[][] variable_type

  
 

在这里插入图片描述

初始化二维数组

a = [3][4]int { {0, 1, 2, 3} , /* 第一行索引为 0 */ {4, 5, 6, 7} , /* 第二行索引为 1 */ {8, 9, 10, 11},   /* 第三行索引为 2 */
}

  
 

访问二维数组

二维数组通过指定坐标来访问。如数组中的行索引与列索引,例如:

val := a[2][3]
// or
var value int = a[2][3]

  
 

示例:

package main

import "fmt"

func main() { var a = [5][2]int{ {0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}, // 注意这里必须要加上逗号 ”,“,因为 Golang 编译器会自动补全 ”;“ 号。 } for  i := 0; i < 5; i++ { for j := 0; j < 2; j++ { fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] ) } }
}

  
 

向函数传递数组

如果想向函数传递数组实参,就需要在函数声明时,声明形参为数组类型。

  1. 形参设定数组大小:
void myFunction(param[10] int)

  
 
  1. 形参未设定数组大小:
void myFunction(param[] int)

  
 

同样的,向函数传递数组也有两种方式:

  1. 值传递:直接传递数组变量名。
  2. 引用传递:传递数据的指针。

示例:

package main

import "fmt"

func change(arr[5] int) { arr[0] = 1 for i :=0; i < 5; i++ { fmt.Println(arr[i]) } fmt.Println("--------")
}

func main() { var balance = [5]int {1000, 2, 3, 17, 50} change(balance) for i :=0; i < 5; i++ { fmt.Println(balance[i]) }
}

  
 

结果:

1
2
3
17
50
--------
1000
2
3
17
50

  
 

指针数组

指针数组,即存储指针的数组,跟 C 语言中的指针数组类似。

声明一个整型指针数组:

var ptr[MAX] *int;

  
 

示例:

package main

import "fmt"

const MAX int = 3

func main() { var i int a := [MAX]int {10, 100, 200} var ptr[MAX] *int; for  i = 0; i < MAX; i++ { ptr[i] = &a[i] /* 将整数的地址赋值给指针数组 */ } for  i = 0; i < MAX; i++ { fmt.Printf("a[%d] = %d\n", i, *ptr[i]) }
}

  
 

文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。

原文链接:is-cloud.blog.csdn.net/article/details/107144952

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。