
- •Рязанская государственная радиотехническая академия Объектно-ориентированное программирование
- •Рязань 2003
- •390005, Рязань, ул. Гагарина, 59/1.
- •1. Программирование линейных алгоритмов Основные понятия
- •Идентификаторы
- •Объявление переменных
- •Стандартные типы данных
- •Представление констант
- •Символьные константы
- •Строковые константы
- •Ввод – вывод данных
- •Математические функции
- •Контрольные вопросы
- •Варианты заданий
- •2. Программирование алгоритмов разветвляющейся структуры Операторы управления
- •Контрольные вопросы
- •Цикл с параметром
- •Контрольные вопросы
- •Варианты заданий
- •4. Массивы. Классы памяти переменных Классы памяти переменных
- •Распределение памяти
- •Массивы
- •Инициализация
- •Указатели
- •Связь одномерных массивов с указателями
- •Связь двумерных массивов с указателями
- •Динамические массивы
- •Контрольные вопросы
- •Варианты заданий
- •5. Функции пользователя
- •Передача параметров в функции
- •Шаблоны функций
- •Контрольные вопросы
- •Варианты заданий
- •6. Структуры, объединения, битовые поля Структуры
- •Объединение
- •Битовые поля
- •Контрольные вопросы
- •Варианты заданий
- •7. Файлы
- •Типовые операции с файлами
- •Функции форматного ввода и вывода данных
- •Определение длины файла:
- •Спецификаторы доступа
- •Конструкторы и деструкторы
- •Наследование
- •Наследование и контроль доступа
- •Указатель this
- •Перегрузка операций
- •Константные объекты и константные методы
- •Статические элементы класса
- •Виртуальные функции
- •Абстрактные классы
- •9. Варианты заданий на курсовое проектирование
- •Оглавление
Распределение памяти
Код программы
|
Внешние и статические данные |
Динамически распределенная память |
Стек |
Массивы
Массив - совокупность данных одного типа.
Тип <имя> [количество элементов]; - обычный одномерный массив. Этот массив выделяется один раз и держит память занятой в зависимости от принадлежности к определенному классу памяти.
void f( )
{ объявление массива}
После выхода из блока место в стеке очищается – это локальный массив.
Тип <имя>[количество элементов][количество элементов]; - двумерный массив. В памяти компьютера двумерный массив располагается последовательно по строкам. Расположение многомерного массива в памяти можно определить по правилу, что быстрее всего изменяется последний индекс. Для доступа к элементу массива используется специальная операция индексирования. Значения индекса начинаются с 0. Последний индекс на единицу меньше количества элементов. Контроль выхода за границы массива возлагается на программиста.
Пример:
int A[3] ; //объявление массива из 3-х элементов целого типа выделяется 3*sizeof(int) байт памяти
A[0]=11; // присваивание первому элементу значения 11
cout<<A[0]<<’\n’; // Вывод 11 на экран
++A[0];//Увеличение первого элемента на 1
cout<<A[0]<<’\n’; // Вывод 12 на экран
Инициализация
int A[3] = {6,7,8};
Компилятор выделяет 4*количество элементов, в данном случае 4*3=12 байт.
int A1[2] [2] = {{3,4},{5,6}};
Объявление массива типа char:
char A[10];
Инициализация массива типа char:
char s1[6] = {‘Р’, ‘Г’,’Р’,’Т’,’A’, ‘\0’};
В конце объявления массива типа сhar надо вставить’\ 0’ – символ- терминатор, по этому символу определяется конец строки:
char s1[ ] = {‘Р’,’Г’,’Р’,’Т’,’А’,\’0’}.
Чаще используется другой вариант инициализации:
char s2[ ] = “РГМУ”,
терминатор в этом случае автоматически добавляет компилятор.
Пример: подсчет среднемесячной температуры
float Srtemp(float mastemp[ ], int kol_day)
{int i; float s=0;
for(i=0;i<kol_day; i++ )
s+= mastemp[i];
return s/ kol_day;}
Вызов функции для массива температур марта -
float Mart[31] , st;
st= Srtemp (Mart,31);
Указатели
Указатели – переменные, позволяющие хранить адрес.
Объявление указателя: тип * имя_указателя;
Компьютер выделяет 4 байта памяти по умолчанию для хранения адреса.
Пример:
char * s3; //s3 хранит адреса типа Char
char * s3 = “Рязань”; //в данном случае s3 трактуется не только
// как адрес, но и как символьная строка длиной 7 байт начальный
// адрес которой записан в s3.
Указателям до их использования необходимо задавать начальные (инициализирующие) значения.
Например:
int* px=NULL; // NULL зарезервированное значение адреса
int x,*px1; px1=&x; // переменной указателю px присваивается
// значение адреса переменной x.
<тип> - необходим, чтобы компилятор мог определить на сколько байт осуществляется перемещение при ++ или --.
Связь одномерных массивов с указателями
Имя массива представляет собой константу – указатель на первый элемент массива, иначе говоря – адрес первого элемента.
Например, для массива int A[3]; А ==&A[0]. Для извлечения значения по какому-либо адресу можно применить операцию разадресации: *А == А[0].
Для i - го элемента *(А+I) == A[I].