Замечания и подробности использования массива Golang Array

В массивах go длина является частью типа данных [3]int *[3]int 

 

Примечания и подробности использования массивов


1) Массив представляет собой комбинацию нескольких данных одного типа. После объявления/определения массива его длина фиксируется и не может быть изменена динамически.

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

2) var arr[ ]int тогда arr — это срез ( если в [] не указан размер, то это срез )

3) Элементы массива могут иметь любой тип данных, включая типы значений и ссылочные типы , но их нельзя смешивать.

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

0xc0000a60f8 0xc0000a6100 0xc0000a6108

4) После создания массива, если значение не присвоено, существует значение по умолчанию. Массив числового типа: значение по умолчанию — 0. Строковый массив: значение по умолчанию — «». Массив Bool: значение по умолчанию — false (в на самом деле, когда массив определен, пространство уже выделено. Просто используйте значение по умолчанию, не назначая его)

5) Шаги по использованию массива: 1. Объявите массив и освободите пространство. 2. Присвойте значение каждому элементу массива ( не присвоение значения означает использование нулевого значения по умолчанию ). 3. Использование массива.

6) Индексы массивов начинаются с 0.

7) Индексы массива должны использоваться в пределах указанного диапазона, иначе будет сообщено о панике: массив выходит за пределы, например, var arr [5]int, допустимые индексы 0-4

8) Массив Go — это тип значения. По умолчанию он передается по значению, поэтому копирование значений будет выполняться и массивы не будут влиять друг на друга.

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

Примечание. [3]int — это тип данных, а длина также является типом данных. [3]int [4]int — это разные типы данных. 

 9) Если вы хотите изменить исходный массив в других функциях, вы можете использовать передачу ссылок (метод указателя) [Сначала попробуйте и нарисуйте диаграмму]

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 представляет указатель на массив типа [3]int.

 

Один из них — копия значения, а другой — указатель.Если данные очень большие, копирование значений требует очень много ресурсов.

Если вы хотите изменить только внешний массив с помощью массива, используйте передачу указателя, которая является эффективной и быстрой.

Первый не удается скомпилировать: при передаче массива длина является частью типа. Здесь массив разрезается, и компиляция завершается неудачно.

Вторая ошибка: длина является частью типа данных, длина отличается, [3]int отличается от типа [4]int

Третий правильный

Supongo que te gusta

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