Go编程基础06-数组

数组

  • 数组的定义格式:var varName [n] varType.n >=0
package main

import "fmt"

func main() {
	a := [2]int{1}
	fmt.Println(a)
	// 索引赋值,给索引为10的元素赋值3
	b := [20]int{ 10 : 3}
	fmt.Println(b)
	// 由系统自动计算数组长度
	c := [...]int{1, 2, 3, 4}
	fmt.Println(len(c))
}
  • 数组的长度也是类型的一部分,因此不同长度的数组为不同类型
package main

import "fmt"

func main() {
	var a [2]int
	var b [1]int
	a = b // cannot use b (type [1]int) as type [2]int in assignment
	fmt.Println(a)
}
  • 注意区分指向数组的指针和指针数组
package main

import "fmt"

func main() {
	a := [...]int{99 : 1}
	// 指向数组的指针
	var p *[100]int = &a
	fmt.Println(p)
	x, y := 1, 2
	// 数组指针,存放的是指针
	b := [...]*int{&x, &y}
	fmt.Println(b)
}
  • 数组在Go中为值类型,即当将数组传递到方法或者函数中,是将整个数组拷贝,而不是传数组的地址。
  • 数组之间可以使用==!=进行比较,但不可以使用><
package main

import "fmt"

func main() {
	a := [2]int{1, 2}
	b := [2]int{1}
	c := [3]int{1, 2}
	fmt.Println(a == b) // false
	// 数组长度不同,类型不同,无法直接比较
	fmt.Println(a == c) // invalid operation: a == c (mismatched types [2]int and [3]int)
}
  • 可以使用new来创建数组,此方法返回一个指向数组的指针
package main

import "fmt"

func main() {
	// 用new创建数组,返回的是数组的指针
	p := new([5]int)
	// 不论是指向数组的指针,还是数组都可以通过索引改变值
	p[1] = 2
	fmt.Println(p) // &[0 0 0 0 0 0 0 0 0 0]
}
  • Go支持多维数组
package main

import "fmt"

func main() {
	a := [2][3]int {
		{1, 2, 3},
		{4, 5, 6}  }
	fmt.Println(a)
}
  • 冒泡排序
package main

import "fmt"

func main() {
	a := [...]int{5, 2, 6, 3, 9}
	fmt.Println(a)

	num := len(a)
	for i := 0; i < num; i++  {
		for j := i + 1; j < num ; j++  {
			if a[i] < a[j] {
				temp := a[i]
				a[i] = a[j]
				a[j] = temp
			}
		}
	}
	fmt.Println(a)
}

猜你喜欢

转载自blog.csdn.net/Loiterer_Y/article/details/83581919