Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб С++_ОСНОВЫ ПРОГРАММИРОВАНИЯ_ч_2_изм_чис...doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
803.84 Кб
Скачать

3.3.Операции над указателями

Для указателей-переменных разрешены некоторые операций: присва­ивание, инкремент/декремент, сложение/вычитание и сравнение. Язык C++ разрешает операцию сравнения указателей одинакового типа. При выполнении присваивания значение указателя в правой части выражения пересылается в ячейку памяти, отведенную для указателя в левой части.

Важной особенностью арифметических операций с указателем яв­ляется то, что физическое увеличение или уменьшение значения указателя зависит от его типа, т.е. от размера того объекта, на кото­рый указатель ссылается. Если к указателю, описанному как:

type *ptr;

прибавляется или отнимается константа N, значение ptr изменяется на величину произведения N нa размер типа type. Разность двух указателей:

type *ptr1,

*ptr2;

это разность их значений, поделенная на размер типа type.

В частности, арифметические операции над указателями типа char * (размер типа равен 1) выполняются как над обычными целыми числа­ми с той лишь разницей, что значения, участвующие в операции - это адреса в оперативной памяти. Однако для других типов указателей это не так, например (Листинг 3.37):

Листинг 3.37. Пример операций над указателями

Рассмотрим приведенный выше пример (Листинг 3.29). Так как указатель имеет тип int * (длина типа 4 байта), то "единица измене­ния" указателя и "единица измерения разности" равны 4 байтам. Для других типов указателей такие же вычисления дают следующий ре­зультат:

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

присваивание, инкремент/декремент, сложение/вычитание и сравнение.

3.4.Массивы

Массивы данных C++ аналогичны массивам данных Pascal - это расположенные вплотную друг за другом элементы одного и того же типа. Каждый массив имеет имя. Доступ к элементам массива осуществляется по имени массива и индексу (порядковому номеру) элемента. Основные свойства массива:

• все элементы массива имеют одни и тот же тип;

• все элементы массива расположены в памяти друг за другом;

  • индекс первого элемента равен 0;

  • имя массива является указателем, имеющим значение адреса начала массива

(первого байта первого элемента массива).

3.5.Одномерные массивы

Признаком массива при описании является наличие квадратных скобок [ ]. Константа или константное выражение в квадратных скобках задает число элементов массива, например (Листинг 3.38):

Листинг 3.38. Примеры декларации массивов C+ +

В приведенном выше примере (Листинг 3.30), X массив из float размером 100. Первый элемент Х[0], последний Х[99]. В отличии от языка Pascal, индексы массивов C++ всегда начинаются с 0 и заканчиваются N-1, где N - число элементов массива.

Пример. Приведенная ниже программа вводит значения в массив М

(Листинг 3.39):

Листинг 3.39. Пример программы ввода значений массива

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