Основы программирования для автоматизированного проектирования и решения творческих задач. Романенко А.В - 19 стр.

UptoLike

Составители: 

П р и м е р 12
short i, *Pi = &i;
Pi = Pi + 2;
В этом примере произойдет смещение указателя на четыре байта.
Инкремент (++) и декремент (--) указателей полностью аналогичен операциям уменьшения и увеличения указателя на
единицу, т.е. указатель перемещается к соседней ячейке памяти на расстояние длиной sizeof(тип).
В некоторых случаях указатель необходимо переместить к ячейке памяти, начинающейся с адреса, не кратного размеру
участка памяти относительно его базового типа, для чего необходимо в качестве операндов соответствующих операций ис-
пользовать числовые значения указателей.
П р и м е р 13
int i, *Pi, *P1;
Pi = &i;
P1 = (int *) ((int) Pi + 1);
11 СЛОЖНЫЕ ТИПЫ ДАННЫХ В ЯЗЫКЕ С
В начале развития программирования очень часто программы обрабатывали переменные, содержавшие только одно
значение. Однако сразу же выявились недостатки подобного метода разработки программ: для большого числа однотипных
данных необходимо было держать большое число программных объектов со своими именами. Выходом из сложившейся си-
туации стало введение сложных типов данных, которые в языке С образованы на основе указателей. Посредством косвенной
адресации, используя константный указатель как базовый адрес, стало возможным, используя одно имя переменной, адресо-
ваться к целой группе ячеек памяти, которые занимают непрерывный участок в памяти ЭВМ. Далее рассмотрены сложные
типы данных языка программирования С (массив, структура, объединение, файл) и основы работы с ними.
11.1 Массивы
Массив представляет собой объединение конечного числа однотипных данных, хранящихся в памяти компьютера непо-
средственно друг за другом. Для доступа к конкретному элементу массива необходимо указать его номер в последователь-
ности. В основе идеи массивов лежит заимствованное из математики понятие матрицы.
Определение одномерного массива в языке С выглядит следующим образом:
тип имя_массива [константное_выражение];
здесь типбазовый тип элементов массива; имя массиваидентификатор; константное выражениеопределение размера
массива (в некоторых случаях может отсутствовать).
Допускается описание массива без явного указания количества элементов в нем:
а) при описании внешнего массива, определенного в другой части программы,
extern long A[];
б) при явной инициализации массива в случае его определения
int А[] = {10,50,1,100};
в этом случае число элементов подсчитывается при обработке компилятором списка инициализации.
Массивы, как и простые переменные, могут инициализироваться при определении. Число элементов в списке инициа-
лизации не должно превышать размеры массива:
int A[5] = {0,1,2,3,4};
short MASSIW[5] = {4,2,0};
В случае, если количество элементов в списке инициализации меньше, чем размерность массива, начальные значения
приписываются первым по счету элементам массива.
Необходимо отметить различное поведение массивов на этапах определения (описания) и использования. При опреде-
лении массива ему выделяется память, а его имя ассоциируется со всем массивом. При использовании массива его имя вос-
принимается как константный указатель базового типа элементов массива. Исключение составляет операция
sizeof(имя_массива). Она вычисляет длину в байтах всего участка памяти, выделенного под массив. Особенность операции
взятия адреса (&), примененной к имени массива, является:
имя_массива == &имя_массива == &имя_массива[0].
Доступ к элементам массива осуществляется с помощью индексированных переменных:
имя_массива[индекс]