- •Описание языка программирования с
- •Элементы языка программирования с
- •Используемые символы
- •Константы
- •Идентификатор
- •Использование комментариев в тексте программы
- •Типы данных и их объявление
- •Категории типов данных
- •Целый тип данных
- •Данные плавающего типа
- •Указатели
- •Переменные перечислимого типа
- •Массивы
- •Структуры
- •Объединения (смеси)
- •Поля битов
- •Переменные с изменяемой структурой
- •Определение объектов и типов
- •Инициализация данных
- •Выражения и присваивания
- •Операнды и операции
- •Преобразования при вычислении выражений
- •Операции отрицания и дополнения
- •Операции разадресации и адреса
- •Операция sizeof
- •Мультипликативные операции
- •Аддитивные операции
- •Операции сдвига
- •Поразрядные операции
- •Логические операции
- •Операция последовательного вычисления
- •Условная операция
- •Операции увеличения и уменьшения
- •Простое присваивание
- •Составное присваивание
- •Приоритеты операций и порядок вычислений
- •Побочные эффекты операций присваивания
- •Преобразование типов
- •Операторы
- •Оператор выражение
- •Пустой оператор
- •Составной оператор
- •Оператор if
- •Оператор switch
- •Оператор break
- •Оператор for
- •Оператор while
- •Оператор do while
- •Оператор continue
- •Оператор return
- •Оператор goto
- •Определение функций
- •Определение и вызов функций
- •Вызов функции с переменным числом параметров
- •Объявление переменных
- •Исходные файлы и объявление переменных
- •Объявления функций
- •Время жизни и область видимости программных объектов
- •Инициализация глобальных и локальных переменных
- •Указатели
- •Методы доступа к элементам массивов
- •Указатели на многомерные массивы
- •Операции с указателями
- •Массивы указателей
- •Динамическое размещение массивов
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директива #undef
- •Организация списков и их обработка
- •Линейные списки
- •Методы организации и хранения линейных списков
- •Операции со списками при последовательном хранении
- •Операции со списками при связном хранении
- •Организация двусвязных списков
- •Стеки и очереди
- •Сжатое и индексное хранение линейных списков
- •Сортировка и слияние списков
- •Пузырьковая сортировка
- •Сортировка вставкой
- •Сортировка посредством выбора
- •Слияние списков
- •Сортировка списков путем слияния
- •Быстрая и распределяющая сортировки
- •Последовательный поиск
- •Бинарный поиск
- •М-блочный поиск
- •Методы вычисления адреса
- •Выбор в линейных списках
- •Рекурсия
Массивы
Массивы - это группа элементов одинакового типа (double, float, int и т.п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве. Объявление массива имеет два формата:
спецификатор-типа описатель [константное - выражение];
спецификатор-типа описатель [ ];
Описатель - это идентификатор массива .
Спецификатор-типа задает тип элементов объявляемого массива. Элементами массива не могут быть функции и элементы типа void.
Константное-выражение в квадратных скобках задает количество элементов массива. Константное-выражение при объявлении массива может быть опущено в следующих случаях:
- при объявлении массив инициализируется,
- массив объявлен как формальный параметр функции,
- массив объявлен как ссылка на массив, явно определенный в другом файле.
В языке программирования С определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определить и многомерные массивы. Они формализуются списком константных-выражений следующих за идентификатором массива, причем каждое константное-выражение заключается в свои квадратные скобки.
Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного - три и т.д. Отметим, что в языке программирования С первый элемент массива имеет индекс равный 0.
Примеры:
int a[2][3]; /* представлено в виде матрицы a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] */ double b[10]; /* вектор из 10 элементов имеющих тип double */ int w[3][3] = { { 2, 3, 4 }, { 3, 4, 8 }, { 1, 0, 9 } };
В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно.
В языке программирования С можно использовать сечения массива, как и в других языках высокого уровня (PL1 и т.п.), однако на использование сечений накладывается ряд ограничений. Сечения формируются вследствие опускания одной или нескольких пар квадратных скобок. Пары квадратных скобок можно отбрасывать только справа налево и строго последовательно. Сечения массивов используются при организации вычислительного процесса в функциях языка программирования С, разрабатываемых пользователем.
Примеры:
int s[2][3];
Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.
int b[2][3][4];
При обращении к массиву b можно написать, например, b[1][2] и будет передаваться вектор из четырех элементов, а обращение b[1] даст двухмерный массив размером 3 на 4. Нельзя написать b[2][4], подразумевая, что передаваться будет вектор, потому что это не соответствует ограничению наложенному на использование сечений массива.
Пример объявления символьного массива.
char str[] = "объявление символьного массива";
Следует учитывать, что в языке программирования Смвольном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью '\0'.