Оглавление
❮ ❮ ❮ ❯ ❯ ❯

Базовые структуры данных

Статический массив Закрыть

Статический массив

Статический массив – это структура данных, размер которой задается при создании и остается неизменным на протяжении всего времени работы программы. Элементы статического массива хранятся в памяти последовательно, что позволяет обращаться к ним очень быстро. Основным недостатком статического массива является его инфлексибельность: после того как массив будет создан, вы не сможете изменить его размер (добавить или удалить элементы), что требует заранее точно знать, сколько элементов вам потребуется.

Примеры статических массивов в различных языках программирования:

Python:
В Python нет четко обозначенной структуры данных под названием “статический массив”, как в некоторых других языках программирования. Однако, ближайший аналог статического массива – это кортеж (tuple), который является неизменяемым или “статическим” в плане размеров и содержимого после его создания.

Python
# Создание кортежа, который по своей природе является статическим массивом
static_array = (1, 2, 3, 4, 5)
// staticArray.push(6); // Не ОК для статического массива (изменит размер массива)

JavaScript:
JavaScript также не имеет статических массивов в тривиальном понимании, потому что в этом языке массивы могут изменять свой размер динамически. Однако, вы можете имитировать статический массив, просто не изменяя размер уже созданного массива.

JavaScript
// Создание массива с предопределенным размером
let staticArray = [1, 2, 3, 4, 5];
// Мы можем изменять элементы, но размер должен остаться тот же
staticArray[0] = 99; // ОК
// staticArray.push(6); // Не ОК для статического массива (изменит размер массива)

PHP:
В PHP массивы являются ассоциативными и могут динамически изменять свой размер. Чтобы создать статический массив, можно предварительно установить его размер и не изменять его, несмотря на возможности самого языка.

PHP
// Создание массива с фиксированным размером
$staticArray = array(1, 2, 3, 4, 5);
// Мы можем изменить элементы, но не структуру
$staticArray[0] = 99; // ОК
// array_push($staticArray, 6); // Не ОК для статического массива (изменит его размер)

Отметим, что на практике в высокоуровневых языках программирования, таких как Python, JavaScript и PHP, статические массивы не находят широкого применения и чаще используются в языках с низкоуровневым управлением памятью, таких как C или C++.

В языках C и C++ статические массивы являются фундаментальной частью языка и используются очень часто. Вот примеры статических массивов в C и C++:

C
#include <stdio.h>
int main() {
    // Объявление и инициализация статического массива
    int staticArray[5] = {1, 2, 3, 4, 5};
    
    // Доступ к элементам массива
    printf("%d\n", staticArray[0]); // Выводит 1
    
    // Изменение элемента массива
    staticArray[0] = 10;
    printf("%d\n", staticArray[0]); // Выводит 10
    
    // Размер массива остается неизменным
    // Не существует стандартного способа добавить или удалить элементы из массива

    return 0;
}

C++
#include 
#include <array> // Для std::array в C++11 и выше

int main() {
    // В C++ мы также можем использовать std::array, который предоставляет массив фиксированного размера
    // с функциями доступа к его элементам и прочим удобствами стандартной библиотеки
    std::array<int, 5> staticArray = {1, 2, 3, 4, 5};
    
    // Доступ к элементам и вывод первого элемента
    std::cout << staticArray[0] << std::endl; // Выводит 1
    
    // Изменение элемента
    staticArray[0] = 10;
    std::cout << staticArray[0] << std::endl; // Выводит 10
    
    // Размер std::array остается неизменным
    // Удалять или добавлять элементы в std::array нельзя

    return 0;
}

В классическом C, массивы имеют фиксированный размер, который вы должны установить при их объявлении, и этот размер не может быть изменен во время выполнения программы. В C++11 и более новых версиях вы можете использовать контейнер std::array, который обёртывает статические массивы, предоставляя более безопасную альтернативу с дополнительными возможностями, такими как получение размера массива и более удобный интерфейс для доступа к элементам.

Закрыть


❮ ❮ ❮ ❯ ❯ ❯
Оглавление