【5】复杂数据类型

一、数组与切片

(一)数组

  1. 定义数组与遍历
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])
    }
}
  1. 数组在内存中的布局
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])
}
  1. 数组的几种定义方式
arrayInt := [3]int{
   
   }       // 使用类型推导:长度,类型,默认值
arrayInt := [...]int{
   
   1, 2, 3} // 使用类型推导:长度省略,类型,默认值
arrayInt := [...]int{
   
   3: 2, 0: 1} // 使用类型推导:长度省略,类型,默认值,长度推导最大长度
fmt.Printf("arrayInt: %v\n", arrayInt)
  1. 数组的注意事项重点
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.数组的长度是数组定义的一部分,传递参数时必须考虑数组的长度
}
  1. 数组的一些练习
// 输出 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值