Notas e detalhes de uso do array Golang Array

Em matrizes go, o comprimento faz parte do tipo de dados [3]int *[3]int 

 

Notas e detalhes sobre o uso de arrays


1) Um array é uma combinação de vários dados do mesmo tipo. Uma vez que um array é declarado/definido, seu comprimento é fixo e não pode ser alterado dinamicamente.

var a [3]int
a[0] =1.1   这样是不行的,必须是整数

2) var arr []int então arr é uma fatia ( se não houver tamanho escrito em [], então esta é uma fatia )

3) Os elementos da matriz podem ser de qualquer tipo de dados, incluindo tipos de valor e tipos de referência , mas não podem ser misturados.

	var b = [10]*int{&i, &j, &k}
	fmt.Println(len(b))
	fmt.Println(*b[0], *b[1], *b[2])

0xc0000a60f8 0xc0000a6100 0xc0000a6108

4) Após a criação do array, se nenhum valor for atribuído, há um valor padrão. Matriz de tipo numérico: O valor padrão é 0. Matriz de string: O valor padrão é "". Matriz bool: O valor padrão é falso (em na verdade, quando o array é definido, o espaço já foi alocado. , basta usar o valor padrão sem atribuí-lo)

5) Etapas para usar um array: 1. Declarar o array e abrir espaço 2. Atribuir um valor a cada elemento do array ( não atribuir um valor significa usar o valor zero padrão ) 3. Usar o array

6) Os subscritos dos arrays começam em 0.

7) Os subscritos do array devem ser usados ​​dentro do intervalo especificado, caso contrário o pânico será relatado: array fora dos limites, por exemplo, var arr [5]int, os subscritos válidos são 0-4

8) O array de Go é um tipo de valor. Por padrão, ele é passado por valor, portanto a cópia do valor será realizada e os arrays não afetarão uns aos outros.

func Test(t [5]int) {
	fmt.Printf("%p\n", &t)
}

	c := [5]int{1, 2, 3, 4, 5}
	fmt.Printf("%p\n", &c)
	Test(c)

0xc00012a030
0xc00012a060

Nota: [3]int é um tipo de dados e length também é um tipo de dados.[3]int [4]int não é o mesmo tipo de dados. 

 9) Se você quiser modificar o array original em outras funções, você pode usar a transferência de referência (método de ponteiro) [Experimente primeiro e desenhe um diagrama]

func Test(t *[5]int) {
	fmt.Printf("%p \n", t)
	fmt.Println((*t)[0], (*t)[1], (*t)[2], (*t)[3], (*t)[4])
	(*t)[0] = 100
}

func main() {
	c := [5]int{1, 2, 3, 4, 5}
	fmt.Printf("%p \n", &c)
	Test(&c)
	fmt.Println(c)
}


0xc00000e4e0
0xc00000e4e0 
1 2 3 4 5    
[100 2 3 4 5]

a *[3]int a representa um ponteiro para um array do tipo [3]int.

 

Um é uma cópia de valor e o outro é um ponteiro. Se os dados forem muito grandes, a cópia de valor consome muitos recursos.

Se você deseja alterar apenas o array externo ao usar um array, use a transferência de ponteiro, que é eficiente e rápida.

O primeiro falha na compilação: quando o array é passado, o comprimento faz parte do tipo. Aqui, o array é fatiado e a compilação falha.

Segundo erro: O comprimento faz parte do tipo de dados, o comprimento é diferente, [3]int é diferente do tipo [4]int

A terceira está correta

Acho que você gosta

Origin blog.csdn.net/qq_34556414/article/details/132839028
Recomendado
Clasificación