- •Теоретические вопросы к экзамену к экзамену по курсу «Программирование и алгоритмизация»
- •А)Основные типы переменных в с. Б)Правила определения переменных и типов. В)Инициализация данных.
- •A)Время жизни и область видимости программных объектов.Б) Инициализация глобальных и локальных переменных
- •Операторы языка Си. Оператор выражение, составной оператор, операторы условного перехода
- •Оператор цикла for
- •Операторы цикла while и do … while
- •Указатели. Типизированные и нетипизированные.
- •Работа с файлами. Файловая переменная, открытие, закрытие файла.
- •Чтение и запись в файлы. Функция eof()
- •Определение и вызов функций. Фактические и формальные параметры.
- •Определение и вызов функций. Передача массивов и указателей на функции.
- •Бинарный поиск в упорядоченном массиве.
- •Сортировка массива на примере одного из алгоритмов.
- •Связанные списки: описание структуры, добавление и удаление элементов в односвязный линейный список.
- •Вставка узла
- •Удаление узла
- •Виды линейных списков: стек, очередь, дек.
- •Сущность методологии объектно-ориентированного программирования. Инкапсуляция. Наследование. Полиморфизм.
- •Дружественные функции класса.
- •Определение конструктора. Форматы вызова конструктора. Перегрузка конструкторов.
- •Наследование. Определение базового и производного классов.
- •Полиморфизм. Виртуальные функции.
- •Динамическое распределение памяти под объекты. Операторы new и delete. Динамическое выделение памяти
- •Функции operator new() и operator delete()
- •Шаблоны классов. Шаблоны классов
- •Использование шаблонов
- •Шаблоны функций.
- •Жизненный цикл программного продукта.
- •Основные процессы жизненного цикла.
- •Разновидности процесса разработки по.
- •Стадии разработки по
- •Действия при разработке тз
Указатели. Типизированные и нетипизированные.
Указатель – это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера. Подобно тому, как переменная типа char имеет в качестве значения символ, а переменная типа int – целочисленное значение, переменная типа указателя имеет в качестве значения адрес ячейки оперативной памяти. Допустимые значения для переменной-указателя – множество адресов оперативной памяти компьютера.
Указатель является одной из наиболее важных концепций языка C.
Правильное понимание и использование указателей особенно необходимо для составления хороших программ по следующим причинам:
· указатели являются средством, при помощи которого функции могут изменять значения передаваемых в нее аргументов;
· при помощи указателей выполняется динамическое распределение памяти;
· указатели позволяют повысить эффективность программирования;
· указатели обеспечивают поддержку динамических структур данных (двоичные деревья, связные списки).
Однако указатель может вызвать и ряд затруднений, например, если указатель содержит неправильное значение, программа может быть неработоспособной. Можно легко ошибиться при использовании указателей; к тому же ошибки, связанные с неправильными значениями указателей, найти очень трудно.
Итак, указатель – это новый тип данных. Для него определены понятия константы, переменной, массива. Как и любую переменную, указатель необходимо объявить. Объявление указателя состоит из имени базового типа, символа * (звездочка) и имени переменной.
Общая форма объявления указателя:
тип *имя;
Тип указателя определяет тип объекта, на который указатель будет ссылаться, например,
int *p1;
Фактически указатель любого типа может ссылаться на любое место в памяти, но выполняемые над указателем операции существенно зависят от его типа. Так, если объявлен указатель типа int *, компилятор предполагает, что любой адрес, на который он ссылается, содержит переменную типа int, хотя это может быть и не так. Следовательно, объявляя указатель, необходимо убедиться в том, что его тип совместим с типом объекта, на который он будет ссылаться.
Типизированные указатели
char *c; // указатель на char
int *i, j; // указатель на int
i=&j; // i присвоить адрес j
*i=1; // разыменованный указатель j=1
* - операция косвенной адресации
& - операция получения адреса
Указатели
void *p; // нетипизированный указатель
float *pf, f; // типизированный указатель
pf=&f; // pf присвоить адрес f
p=pf; // одному указателю присвоить значение другого
pf=(float *) p; // явное указание типа при разыменовании
Пример: вычисление суммы квадратов первых 100 натуральных чисел:
int *ptr;
long *sum;
*sum = 0;
for (*ptr = 1; *ptr <= 100; (*ptr)++)
*sum = *sum + (*ptr)*(*ptr);
При описании типизированного указателя необходимо сообщить компилятору, адреса переменных какого типа он может хранить(этот пример учить, я думаю не стоит, это паскаль ведь)
var <имя_указателя>: ^<тип_адресуемой_переменой>;
Например:
var p: ^integer;
q: ^real;
s: ^array[1..10] of byte;
Кроме того, существуют универсальные нетипизированные указатели, которые могут хранить адрес переменной любого типа:
var <имя_указателя>: pointer;