Что такое массив (array)
Массив (array) — это структура данных, которая представляет собой фиксированную последовательность элементов одного типа. Все элементы массива размещены в памяти последовательно и имеют одинаковый тип. Используются для хранения коллекций данных, где количество элементов заранее известно и фиксировано.
Основные характеристики
1. Фиксированный размер: Размер массива задается при его объявлении и не может изменяться во время выполнения программы.
2. Тип элементов: Все элементы массива имеют один и тот же тип.
3. Непрерывное размещение в памяти: Элементы массива хранятся последовательно в памяти, что обеспечивает быстрый доступ к любому элементу по индексу.
Объявление и инициализация массивов
Массивы объявляются с указанием типа элементов и фиксированного размера:
```go
var arr [5]int
```
Это объявление создает массив из пяти целых чисел, инициализированных нулями.
Инициализация массива
Могут быть инициализированы при объявлении:
```go
arr := [5]int{1, 2, 3, 4, 5}
```
Можно также инициализировать массив частично, оставив остальные элементы равными нулям:
```go
arr := [5]int{1, 2}
```
Доступ к элементам массива
Осуществляется с использованием индексов, начиная с 0:
```go
fmt.Println(arr[0]) // 1
arr[1] = 10
fmt.Println(arr[1]) // 10
```
Длина массива
Фиксирована и задается при его объявлении. Ее можно получить с помощью функции `len`:
```go
fmt.Println(len(arr)) // 5
```
Копирование массива
При присваивании одного массива другому копируются все элементы:
```go
arr1 := [5]int{1, 2, 3, 4, 5}
arr2 := arr1
arr2[0] = 10
fmt.Println(arr1) // [1 2 3 4 5]
fmt.Println(arr2) // [10 2 3 4 5]
```
Передача массива в функции
Копируется весь массив:
```go
func modifyArray(a [5]int) {
a[0] = 10
}
arr := [5]int{1, 2, 3, 4, 5}
modifyArray(arr)
fmt.Println(arr) // [1 2 3 4 5]
```
Сравнение массивов
С помощью оператора `==`, если они имеют одинаковую длину и тип элементов:
```go
arr1 := [3]int{1, 2, 3}
arr2 := [3]int{1, 2, 3}
arr3 := [3]int{4, 5, 6}
fmt.Println(arr1 == arr2) // true
fmt.Println(arr1 == arr3) // false
```
Пример:
```go
package main
import (
"fmt"
)
func main() {
// Объявление и инициализация массива
arr := [5]int{1, 2, 3, 4, 5}
// Доступ к элементам
fmt.Println("First element:", arr[0]) // First element: 1
// Изменение элементов
arr[1] = 10
fmt.Println("Modified array:", arr) // Modified array: [1 10 3 4 5]
// Длина массива
fmt.Println("Length of array:", len(arr)) // Length of array: 5
// Копирование массива
arr2 := arr
arr2[0] = 20
fmt.Println("Original array:", arr) // Original array: [1 10 3 4 5]
fmt.Println("Copied array:", arr2) // Copied array: [20 10 3 4 5]
// Передача массива в функцию
modifyArray(arr)
fmt.Println("Array after modifyArray call:", arr) // Array after modifyArray call: [1 10 3 4 5]
}
func modifyArray(a [5]int) {
a[0] = 10
}
```
Массивы предоставляют простую и эффективную структуру данных с фиксированным размером. Они полезны для задач, где размер данных известен заранее и не изменяется, обеспечивая прямой доступ к элементам и низкие накладные расходы на управление.
July 1, 2024, easyoffer