Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia-IT-20_c__tsikly-massivy-ukazateli.doc
Скачиваний:
7
Добавлен:
01.05.2025
Размер:
104.45 Кб
Скачать

Массивы и указатели

Массивы

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

Элементы массива занимают один непрерывный участок памяти компьютера и располагаются последовательно друг за другом.

Объявление массивов.

Пример 13. Объявления массивов.

int mas1[492]; // внешний массив из 492 элементов целого типа

main ()

{

double mas2[250]; // массив из 250 вещественных чисел двойной точности

char mas3[20]; // статическая строка из 20 символов

int mas4[2][4]; // двумерный массив из целых чисел из 2-х сток и 4-х столбцов

}

В данном примере идентификаторы перед квадратными скобками [ ] являются именами массивов. Число в квадратных скобках определяет количество элементов массива.

Доступ к отдельному элементу массива организуется по номеру этого элемента, или индексу. Нумерация элементов массива начинается с нуля и заканчивается n-1, где n — число элементов массива.

Пример 14. Описание массива и присваивание начальных значений его элементам.

int mas[2]; //объявление массива

int a=10,b=5; //объявление переменных

mas[0]=a;

mas[l]=b;

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

Инициализация массива означает присвоение начальных значений его элементам при объявлении.

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

Пример 15. Инициализация массива, элементы которого содержат количество дней в каждом месяце года:

int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

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

Массив также можно инициализировать списком без указания в скобках длины массива. При этом массиву присваивается длина по количеству инициализаторов.

Пример 16. Определение количества элементов массива при инициализации.

char code[] = {'a','b','c'};

В данном примере массив code будет иметь длину 3.

Если же массив явно не проинициализирован, то внешние и статические массивы инициализируются нулями. Автоматические же массивы после объявления ничем не инициализируются и содержат неизвестную информацию.

Указатели

Каждая ячейка памяти имеет две характеристики – адрес и значение.

В программировании имя переменной это символическое обозначение ее значения. В языке С++ кроме имен переменных существуют указатели.

Указатель — это символическое обозначение адреса.

Операции с указателями

В C++ имеются две в каком-то смысле обратные друг другу операции:

- операция определения адреса & и

- операция косвенной адресации – *.

С помощью операции & определяется адрес ячейки памяти, содержащей заданную переменную. Например, если vrимя переменной, то &vr — адрес этой переменной или указатель на переменную vr. Указатель &vr — это число, которое является константой типа указатель.

В C++ также существуют и переменные типа указатель. Значением переменной типа указатель служит адрес переменной или объекта. Пусть переменная типа указатель имеет имя ptr, тогда в качестве значения ей можно присвоить адрес переменной vr с помощью следующего оператора:

ptr=&vr;

Противоположная операция косвенной адресации * позволяет обратиться к переменной не напрямую по имени, а косвенно через указатель, содержащий адрес этой переменной.

Данная операция является унарной и выполняется слева направо. Ее не следует путать с бинарной операцией умножения.

Пусть ptr — указатель, тогда *ptr — это значение переменной, на которую указывает ptr.

Тогда:

a=b; // присвоит переменной а значение переменной b

ptr=&b; // присвоит переменной а значение переменной b через указатель

a=*ptr;

Объявление и использование указателей

Объявление указателей выполняется с помощью операторов вида:

<тип переменной> *<имя указателя на переменную заданного типа>;

Пример 17. Объявления указателей.

int *ptri; //указатель на переменную целого типа

char *ptrc; //указатель на переменную символьного типа

float *ptrf; //указатель на переменную с плавающей точкой

Такой способ объявления указателей возник из-за того, что переменные разных типов занимают различное число ячеек памяти.

Пример 18. Использование указателей.

int a=10, b=5;

int *ptr=&a; //инициализация указателя адресом переменной а

соut << "Адрес переменной a = "<< рtr << "\n Значение переменной a ="<<*ptr;

ptr=&b; //теперь ptr указывает на переменную b

соut << "Адрес переменной b = "<< рtr << "\n Значение переменной b ="<<*ptr;

Отметим, что без указателей невозможна обработка объектов. Например, передать объект некоторой функции можно только через указатель.

УКАЗАТЕЛИ И МАССИВЫ

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

В языке C++ имя массива является константным указателем адреса элемента массива с нулевым индексом.

Пусть mas[6]массив из шести элементов.

Тогда записи mas и &mas[0] эквивалентны и определяют адрес 1-го элемента массива.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]