- •Указатели
- •Типы указателей. Объявление указателей.
- •1.1.1. Указатель данных
- •1.1.2. Указатель функции
- •Операции с указателями
- •Тема № 8. Указатели и массивы в языке с.
- •Объявление массива
- •Одномерные (линейные) массивы
- •Многомерные массивы
- •Инициализация массивов
- •Работа с массивами
- •Доступ к элементу массива
- •Обработка массивов
- •Ввод/вывод массивов
- •Примеры программ обработки массивов
- •4.10. Указатели
Работа с массивами
Доступ к элементу массива
Для доступа к конкретному элементу массива используются индексные выражения:
<имя массива>[<целочисленное выражение>].
Квадратные скобки являются требованием синтаксисам языка, а не признаком необязательности конструкции.
Индекс массива может быть не только константой, но и выражением, которое имеет целочисленный тип, например, a[i+1] (здесь a должно быть именем ранее объявленного массива, а i – переменной целого типа).
Объявление массива и индексное выражение, используемое для доступа к элементу массива, имеют схожий синтаксис. Различаются они по месту в программе. Это особенно важно, когда мы определяем индекс последнего элемента массива. Как было сказано ранее, индексы элементов массива в языке C начинаются с 0, и номер последнего элемента на 1 меньше количества элементов массива. Поэтому если Вы объявили массив x из 10 элементов, Вы не можете написать индексное выражение x[10], т.к. в этом случае Вы пытаетесь обратиться к элементу с индексом 10, которого нет в Вашем массиве. Компилятор не выдаст сообщения об ошибке, но результаты работы такой программы будут непредсказуемы.
Обработка массивов
Для обработки элементов массива обычно используется оператор пошагового цикла for.
for (i = 0; |
// Присваиваем счетчику цикла значение индекса первого элемента |
i < n; |
// Условие продолжения цикла – пока значение счетчика меньше количества элементов массива |
i++) |
// Увеличиваем счетчик цикла на 1 для перехода к следующему элементу массива |
<тело цикла> |
// В теле цикла происходит обработка одного элемента массива |
Для обработки многомерного массива используется соответствующее количество циклов.
Массивы не самодостаточны в том смысле, что не гарантируется хранение информации о количестве элементов вместе с самим массивом. В большинстве реализаций С++ отсутствует проверка диапазона индексов для массивов (традиционный низкоуровневый подход к обработке массивов). Более совершенное понятие массива можно реализовать при помощи классов.
Ввод/вывод массивов
В языке C нет возможности вводить и выводить весь массив одним оператором ввода/вывода. Можно вводить и выводить только один элемент массива.
Пример.
int a[10], n; printf("n="); scanf("%d", &n); if (n<0 || n>9) { printf("Количество элементов массива должно быть от 0 до 9!\n"); return; } for (i = 0; i < n; i++) scanf("%d", &a[i]); for (i = 0; i < n; i++) printf("a[%d] = %3d\n", i + 1, a[i]); |
// Объявляем массив и переменную для количества элементов массива // Ввод количества элементов массива // Если входные данные неверны, // то печатаем соответствующее сообщение и выходим из программы // Ввод массива по одному элементу
// Вывод массива на экран |