zoukankan      html  css  js  c++  java
  • 数组 Array

    数组:是同一种数据类型,组成的固定长度的序列。

    定义:var a[len] int,比如:var a[5] int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能改变。

    长度是数组类型的一部分,因此 var a[5] int 和 var a[6] int 是不同的类型

    数组可以通过下标进行访问,从0开始,最后一位下标 len-1

    访问越界,如果下标在数组合法范围之外,则触发访问越界,回panic

    数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。

    支持 == 和 != 操作符,因为内存总是被初始化过的

    指针数组 [n]*T,数组指针 *[n]T

    一维数组

    package main
    
    import (
    	"fmt"
    )
    
    // 全局变量,必须用var声明,局部变量,可以var,可以:=
    
    // 全局
    var arr0 [5]int = [5]int{1,2,3}				// [1 2 3 0 0]
    var arr1 = [5]int{1,2,3,4,5}				// [1 2 3 4 5]
    var arr2 = [...]int{1,2,3,4,5,6,7,8}		// [1 2 3 4 5 6 7 8]
    var str = [5]string{3:"hello",4:"hi"}		// [   hello hi]
    var arr3 = [...]int{5,1:2,3}				// [5 2 3]
    
    // 局部
    func main() {
    
    	var a = [3]int{1,2}						// [1 2 0]				未初始化的元素值是0
    	b := [...]int{1,2,3,4,5,6,7}			// [1 2 3 4 5 6 7]		通过初始化值确定数组的长度
    	c := [5]int{2:100,4:200}				// [0 0 100 0 200]		按照索引,初始化元素
    	d := [...]struct{						// [{user1 10} {user2 20}]		
    		name string
    		age uint8
    	}{
    		{"user1",10},			// 可省略元素类型
    		{"user2",20},			// 最后一行,也要添加 ,
    	}
    
    }
    

    多维数组

    package main
    
    import (
    	"fmt"
    )
    
    // 全局变量,必须用var声明,局部变量,可以var,可以:=
    
    // 全局
    var arr0 [2][3]int									//	[[0 0 0] [0 0 0]]
    var arr1 [2][3]int = [...][3]int{{1,1,1},{2,2,2}}	//	[[1 1 1] [2 2 2]]	第二维度,不能用...
    
    // 局部
    func main() {
    
    	var a = [2][3]int{{1,2,3},{4,5,6}}					// [[1 2 3] [4 5 6]]
    	b := [...][2]int{{1,1},{2,2},{3,3}}					// [[1 1] [2 2] [3 3]]
    
    }

    内置函数 len和cap,都能返回 数组的长度

    package main
    
    import "fmt"
    
    func main() {
    
    	var a = [2][3]int{{1,2,3},{4,5,6}}					
    	fmt.Println(len(a))
    	fmt.Println(cap(a))
    
    }
    

      

    多维数组遍历

    package main
    
    import "fmt"
    
    func main() {
    
    	var f [2][3]int = [...][3]int{{1,2,3},{7,8,9}}
    
    	for k1,v1 := range f {
    		for k2,v2 := range v1 {
    			fmt.Printf("(%d,%d)=%d",k1,k2,v2)
    		}
    		fmt.Println()
    	}
    
    }
    
    // (0,0)=1(0,1)=2(0,2)=3
    // (1,0)=7(1,1)=8(1,2)=9
    

      

    数组拷贝和传参

    package main
    
    import "fmt"
    
    func printArr(arr *[5]int) {
        arr[0] = 10
        for i, v := range arr {
            fmt.Println(i, v)
        }
    }
    
    func main() {
        var arr1 [5]int
        printArr(&arr1)
        fmt.Println(arr1)
        arr2 := [...]int{2, 4, 6, 8, 10}
        printArr(&arr2)
        fmt.Println(arr2)
    }
    
    
    // 0 10
    // 1 0
    // 2 0
    // 3 0
    // 4 0
    // [10 0 0 0 0]		&arr1,指针,arr1被更改
    
    // 0 10
    // 1 4
    // 2 6
    // 3 8
    // 4 10
    // [10 4 6 8 10]
    

      

  • 相关阅读:
    数据绑定(八)使用Binding的RelativeSource
    你是程序猿这块料吗?
    创建与删除索引
    Verilog分频器
    mysql触发器的作用及语法
    QoS令牌桶工作原理
    Android 开发新方向 Android Wear ——概述
    程序猿接私活经验总结,来自csdn论坛语录
    [Node.js]27. Level 5: URL Building & Doing the Request
    [Node.js]26. Level 5 : Route rendering
  • 原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/14656533.html
Copyright © 2011-2022 走看看