Главная страница
Навигация по странице:

  • 2 Сумма всех чисел:30

  • Динамическое выделение

  • Глобальные автоматические массивы

  • Конструкторы и деструкторы

  • Неинициализированные константы тривиального типа

  • презентация. Массивы в языке C Задание за 11 мая 2020г Хромов Даниил Группа ис 1801


    Скачать 108.41 Kb.
    НазваниеМассивы в языке C Задание за 11 мая 2020г Хромов Даниил Группа ис 1801
    Анкорпрезентация
    Дата18.01.2021
    Размер108.41 Kb.
    Формат файлаpptx
    Имя файла34373-massivy-v-yazyke-c.pptx
    ТипДокументы
    #169203

    Массивы в языке C++

    Задание за 11 мая 2020г

    Выполнил: Хромов Даниил

    Группа: ИС 18-01


    Что такое массив?

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

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

    Но с массивом мы получим такую запись:

    эквивалентны

    В объявлении переменной массива мы используем квадратные скобки [], чтобы сообщить компилятору, что это переменная массива (а не обычная переменная), а в скобках — количество выделяемых элементов (это называется длиной или размером массива).

    В примере, который был на втором слайде, мы объявили фиксированный массив с именем test и длиной 5. Фиксированный массив (или ещё «массив фиксированной длины») представляет собой массив, размер которого известен во время компиляции. При создании test, компилятор выделит 5 целочисленных переменных.

    Элементы массива


    Каждая из переменных в массиве называется элементом. Элементы не имеют своих собственных уникальных имён. Вместо этого для доступа к ним используется имя массива вместе с оператором индекса [] и параметром, который называется индексом, и который сообщает компилятору, какой элемент мы хотим выбрать. Этот процесс называется индексированием массива.

    В нашем примере элементом в нашем массиве является test[0], второй — test [1], последний — test[5]. Для доступа к разным элементам нужно изменить только индекс.

    Важно: Отсчёт в программировании и в С++ всегда начинается с 0, а не с 1.

    Для массива длиной N элементы массива будут пронумерованы от 0 до N-1

    Это называется диапазоном массива.

    Пример программы с использованием массива

    Результатом выполнения будет:

    2 Сумма всех чисел:30

    Результат выполнения программы:

    Сумма всех чисел:4.746

    Также массивы можно делать из структур

    Организация массива

    Память под массив может выделяться автоматически или динамически.

    Автоматическое выделение памяти используют, когда размер массива известен на этапе компиляции (т. е. при написании кода).

    Динамическое выделение памяти используют, когда размер массива неизвестен на этапе компиляции (допустим, запрашивается у пользователя).

    Оба типа массивов могут быть как глобальными (определёнными вне функций), так и локальными (определёнными внутри функции или блока). Здесь для автоматических массивов существует одна тонкость. Память для локального автоматического массива выделяется в стеке. Поэтому размер такого массива должен быть небольшим. В противном случае можно получить переполнение стека и, как следствие, аварийное завершение программы. Переполнение стека также можно получить и при небольших размерах локального автоматического массива, при многократных рекурсивных вызовах функции. Поэтому, когда вы определяете в функции автоматический массив, вы должны точно знать, что делаете. Глобальные автоматические массивы в плане переполнения стека безопасны. Но они будут видны во всём коде, лексикографически расположенному после объявления массивов, что может спровоцировать их использование напрямую, минуя их передачу в функции через параметры. Это приведёт к возникновению побочных эффектов работы функций, что затрудняет отладку и делает программы менее надёжными. Такого использования глобальных массивов следует избегать. Для массивов, использующих динамическое выделение памяти, память распределяется из «кучи» (heap). Куча — это память, выделяемая программе операционной системой, для использования этой программой. Размер кучи, как правило, значительно больше размера стека, а для ОС, поддерживающих парадигму виртуальной памяти, размер кучи теоретически может ограничиваться только разрядностью приложения.

    Многомерные массивы

    Позволяет создавать массивы с размерностями больше двух. Многомерный массив объявляется следующим образом: тип имя [размерN] ... [размер2] [размер1];  

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

    Важно знать, что в многомерных массивах требуется некоторое время на вычисление каждого индекса. Это означает, что доступ к элементу в многомерных массивах происходит медленнее, чем доступ в одномерных массивах. По этой и другим причинам, если возникает необходимость в многомерных массивах, для них чаще всего память выделяется динамически с использованием функции динамического выделения памяти.

    При передаче многомерных массивов функции следует определить все размерности, кроме самой левой.

    Инициализация массивов

    Конструкторы и деструкторы можно назвать ключевыми элементами объектной модели С++. При создании объекта обязательно вызывается конструктор, а при удалении — деструктор. Но проблемы совместимости с С вынудили сделать некоторое исключение, и это исключение называется тривиальные типы. Они введены для моделирования C-типов и жизненного цикла переменных, без обязательного вызова конструктора и деструктора. Код языка C, если он компилируется и выполняется в С++, должен работать так же как в С. К тривиальным типам относятся числовые типы, указатели, перечисления, а также классы, структуры, объединения и массивы, состоящие из тривиальных типов. Классы и структуры должны удовлетворять некоторым дополнительным условиям: отсутствие пользовательского конструктора, деструктора, копирования, присваивания, виртуальных функций. Переменная тривиального типа будет неинициализированной, если не использовать какой-нибудь вариант явной инициализации. Для тривиального класса компилятор может сгенерировать конструктор по умолчанию и деструктор. Конструктор по умолчанию обнуляет объект, деструктор ничего не делает. Но этот конструктор будет сгенерирован и использован только, если использовать какой-нибудь вариант явной инициализации, иначе переменная останется неинициализированной.
    Тривиальные типы и неинициализированные переменные
    Неинициализированные константы тривиального типа выявляет компилятор, иногда он выявляет и другие неинициализированные переменные, но с этой задачей лучше справляются статические анализаторы кода. В стандартной библиотеке С++ есть шаблоны, называемые свойствами типов (заголовочный файл ). Один из них позволяет определить, является ли тип тривиальным. Выражение std::is_trivial<Т>::value имеет значение true, если T тривиальный тип и false в противном случае.


    написать администратору сайта