- •Записать тернарную операцию для оператора (л.6):
- •Определите понятие «оператор». «Пустой оператор» и пример его использования. Каждый ли оператор заканчивается «точкой с запятой»? (л.6)
- •Синтаксис оператора if. (л.6).
- •Использование вложенного условного оператора для оптимизации выполнения условия. (л.6).
- •Указать область видимости переменной k: (л.6).
- •Синтаксис оператора цикла с предусловием. Организация на его основе бесконечного цикла (л.7) .
- •Использование операторов break, сontinue, return и функции exit() (л.6) .
- •Интерпретировать выражения:
- •Указать ошибку:
- •Являются ли эквивалентными приведенные две группы операторов:
- •Синтаксис оператора цикла с постусловием. Организация на его основе бесконечного цикла (л.7) .
- •Синтаксис оператора цикла for. Организация на его основе бесконечного цикла. Использование «неполных» форм записи оператора цикла for (л.7) .
- •Выражение оператора цикла for через while (л.7) .
- •2.1. Определить, какому интервалу из области определения функции принадлежит текущее значение х.
- •2.2. Вычислить значение функции y по соответствующей формуле.
- •2.3. Вывести значения X и y
- •. Нахождение корня нелинейного уравнения методом половинного деления
- •Приемы эффективного программирования (л.7) .
- •Определение наибольшей степени целого числа 100, которую можно вычислить, пользуясь типом long
- •Табулирование функции на отрезке с выбором расчетной формулы (л.7) . Табулирование функции на отрезке
- •Вычисление суммы членов бесконечного ряда (ряд Тейлора) на отрезке (л.7) .
- •Вычисление значения многочлена на отрезке по схеме Горнера (л.7) .
- •Проверить, является ли заданное число простым. (л.7) Проверка, является ли число простым
- •Логическое представление в компьютере целых чисел (с примерами) (л.8) .
- •Логическое представление в компьютере вещественных чисел (с примерами) (л.8) .
- •Объяснить получение результата*:
- •Объяснить получение результата*:
- •Объяснить получение результата*:
- •Объяснить получение результата*:
- •Объяснить получение результата*:
- •Объяснить получение результата*:
- •Объяснить получение результата*:
- •Определение и способы инициализации указателей. Операции над указателями (л.9) .
- •Операции над указателями
- •Операции инкремента и декремента
- •Укажите особенности использования указателей типа void * (л.9) .
- •Составить описание типа(л.9):
- •Проинтерпретируйте выражение int *(*pp[15])(). (л.9)
- •Проинтерпретируйте выражение int *(*pp[15])(int *).(л.9)
- •Определите понятие «ссылка». Как инициализировать ссылку? (л.9)
- •Как изменить значение ссылки после инициализации? Можно ли построить ссылку на ссылку? указатель на ссылку? (л.9)
- •Виды указателей (указатель на константу, константный указатель, константный указатель на константу) и их особенности (л.9) . Виды указателей указатель на константу
- •Указатель-константа
- •Указатель-константа на константу
- •Указатель на указатель
- •Возможные присваивания (л.9):
- •Указать и объяснить ошибку, если она есть (л.9):
Определение и способы инициализации указателей. Операции над указателями (л.9) .
Указатель-переменная (указатель) – это переменная, предназначенная для хранения адреса (занимает 4 байта памяти).
Существует несколько способов присвоить значение переменной-указателю:
инициализация указателя адресом переменной, определенной ранее
int a=5;
int *iptr = &a; //определение указателя и его инициализация адресом переменной а
int *iptr1(&a); // определение указателя и другая форма его инициализации
инициализация указателя значением другого указателя, ранее проинициализированного
int *kptr = iptr; //определение указателя и его инициализация значением указателя iptr
определение указателя (вне функции) с предписанием static: начальное его значение – нулевой адрес памяти:
static int *kptr;
инициализация указателя явным адресом памяти с последующим приведением типа:
int main ()
{ int a, b[5]={1,2,3,4,5};
int *pi = reinterpret_cast <int*> (0x0012ff44); //адрес массива(известен, например, при отладке)
for (int i=0; i<5; i++)
{cout << *(pi+i) << endl; //1 2 3 4 5
_getch();
}
return 0;
}
Заметим, что операция reinterpret_cast применяется для преобразования не связанных между собой типов (указателей в целые или наоборот, указателей в указатели и пр.) и позволяет программисту обозначать опасные преобразования, результат которых остается на его совести.
инициализация указателя именем массива или присвоение ему имени функции, которые трактуются как адреса-константы
int b[10]; //массив
int *ptr = b; //инициализация указателя адресом массива
void f (int a) {/*тело функции*/} // имя функции f в С++ – это указатель-константа, //равный адресу первой машинной команды функции
void (*pf)(int)=f; //присваивание указателю pf адреса функции f
//pf – указатель на любую функцию c аргументом типа int и не возвращающую значения
инициализация указателя нулевым значением
int *pi = NULL; //pi - указатель инициализируется константой, определенной как //нулевой (пустой) указатель
int *pi = 0; // нулевой указатель, еще одна форма инициализации
Нулевой указатель не обязательно связан с участком памяти, имеющим нулевой адрес или хранящим нулевое значение. Он просто отличен от указателя на любой объект. Попытка разыменования нулевого указателя бесперспективна.
инициализация указателя адресом участка динамической памяти
выделяемого с помощью операции new:
int *nptr = new int; //определение переменной-указателя nptr и инициализация ее адресом памяти, //выделенной для динамической переменной типа int;
delete nptr; // уничтожение динамической переменной;
int *kptr = new int(10); //определение переменной-указателя kptr, инициализация ее адресом памяти, //выделенной для динамической переменной типа int, инициализируемой значением 10; delete kptr; // уничтожение динамической переменной;
int *mptr= new int[10]; //выделение памяти под динамический массив из 10 элементов типа int, //запись адреса этой памяти в переменную-указатель mptr delete [ ] mptr; //освобождение памяти, занимаемой массивом;
или с помощью функции malloc:
int *iptr; iptr = reinterpret_cast <int*> ( malloc( sizeof(int) ) ); //выделение sizeof(int) байтов памяти и приведение типа значения void*, //возвращаемого функцией malloc, к типу int* *iptr = 421; //присваивание значения динамической переменной free (iptr); // уничтожение динамической переменной; |
bool by;
bool *pbx = new (bool); // статические переменные by, pbx и динамическая переменная без имени *pbx = true;
by = !*pbx; //значение !*pbx равно false
delete pbx; // статические переменные by и pbx существуют, //освобождается память, занимаемая динамической переменной
cout << by<< endl;
//pbx = by; error !!! т.к. указателю = значение
//delete by; error!!! т.к. стат.переменная
