文章目录
一、数组与切片
(一)数组
- 定义数组与遍历
package main
import "fmt"
func main() {
var arrayInt [3]int // 定义一个长度为 3 的数组
arrayInt[0] = 1
fmt.Printf("%#v\n", arrayInt)
// 遍历数组,并且打印元素《常用方式》
for idx, val := range arrayInt {
fmt.Printf("arrayInt[%d] = %d\n", idx, val)
}
for i := 0; i < len(arrayInt); i++ {
fmt.Printf("arrayInt[%d] = %d\n", i, arrayInt[i])
}
}
- 数组在内存中的布局
package main
import "fmt"
func main() {
var arrayInt [6]int // 定义一个长度为 6 的数组
arrayInt[0] = 1
// arrayInt addr is: 0x1400012e000
// arrayInt[0] addr is: 0x1400012e000
// 数组的地址就是数组中第一个元素的地址
fmt.Printf("arrayInt addr is: %p\n", &arrayInt)
fmt.Printf("arrayInt[0] addr is: %p\n", &arrayInt[0])
// arrayInt[1] addr is: 0x1400012e008 / 第二个元素的地址等于第一个元素地址加上 int 字节数
fmt.Printf("arrayInt[1] addr is: %p\n", &arrayInt[1])
}
- 数组的几种定义方式
arrayInt := [3]int{
} // 使用类型推导:长度,类型,默认值
arrayInt := [...]int{
1, 2, 3} // 使用类型推导:长度省略,类型,默认值
arrayInt := [...]int{
3: 2, 0: 1} // 使用类型推导:长度省略,类型,默认值,长度推导最大长度
fmt.Printf("arrayInt: %v\n", arrayInt)
- 数组的注意事项重点
package main
func main() {
// 1.数组是相同类型的组合,长度和类型确定后就不能再进行动态变化
// arrayInt := [3]int{}
// arrayInt[3] = 1 // Invalid array index '3' (out of bounds for the 3-element array)
// 2.区分数组与切片
// sliceStr := []string{"hello", "world"} // 切片
// arrayStr := [...]string{"hello", "world"} // 数组
// fmt.Printf("sliceStr type:%T, arrayStr type:%T\n", sliceStr, arrayStr)
// 3.数组中的元素可以是任意类型,可以是值类型或者引用类型,但是不能混用
// arrayInt := [...]int{1, "2"} // '"2"' (type string) cannot be represented by the type int
// 4.使用数组的过程:1)声明数组并开辟空间;2)给数组各个位置赋值,默认零值;3)使用数组
// 5.golang 中的数组属于值类型,在默认情况下属于值传递,因此会进行值拷贝,数组间不会相互影响:不同于 python
// 6.数组的长度是数组定义的一部分,传递参数时必须考虑数组的长度
}
- 数组的一些练习
// 输出 26 个字母
package main
import "fmt"
func main() {
byteArray := [26]byte{
}
byteArray[0] = byte('A')
for i := 0; i < 26; i++ {
if i > 0 {
byteArray[i] = byteArray[i-1] + 1
}
fmt.Printf("%c", byteArray[i])
}
}
// 求一个数组的最大值
package main
标签:复杂,int,arrayInt,数据类型,数组,Printf,main,fmt
From: https://blog.csdn.net/Grit_my/article/details/143361538