Лабораторная работа № 11. Указатели и ссылки
Задание
| Краткие теоретические сведения
| 1. Изучить работу с указателями, выполнив программу, записанную в правой части.
| Указатель - это переменная, значением которой является адрес.
Пусть объявлена переменная а: int a = 0; Указатель на нее: int *ptr; Можно в указатель поместить адрес переменной и напечатать его: ptr = & a; cout < < ptr;
Здесь & - операция получения адреса, * - операция разыменования. Через указатель можно изменять значение, хранящееся по адресу:
int a, *ptr; ptr = & a; a = 10;
cout < < a< < " " < < *ptr< < endl;
*ptr = 20;
cout < < a< < " " < < *ptr< < endl;
Чтобы выполнить арифметические и логические операции над указателями или над объектами, на которые они указывают, необходимо при выполнении каждой операции явно определить тип объектов. При выполнении операций учитывается тип указателей. Например: char *pz; int *pk, *pi; float *pf;
pz++; //значение указателя изменяется на 1
pk++; //значение указателя изменяется на 2
pf++; //значение указателя изменяется на 4
| 2. В правой части записаны фрагменты программ с использованием указателя на константу, константного указателя, константного указателя на константу.
Убрать ошибочные операторы, дописать операторы вывода и выполнить программы на компьютере.
| Указатель на константу
| Константный указатель
| Константный указатель на константу
| { int a = 9;
const int *pa;
pa = & a;
*pa = 12; // ошибка (нельзя менять значение переменной а)
int b = 20;
pa = & b; }
| { int a = 99;
int* const pa = & a;
int b = 44;
pa = & b; // ошибка (константный указатель менять нельзя)
*pa = 12;
}
| { int a = 99;
const int* const pa = & a;
*pa = 33; // ошибка (нельзя менять содержимое переменной а)
int b = 44;
pa = & b; // ошибка (константный указатель на константу менять нельзя)
}
|
| 3. В правой части записана программа суммирования значений а, которые вводятся с клавиатуры, с использованием указателя.
В соответствии со своим вариантом написать программу из лабораторной работы № 8 с использованием указателей.
| #include < iostream>
void main()
{
setlocale (LC_CTYPE, " Russian");
using namespace std;
float a, *pa, s=0; int i;
pa = & a;
for (i = 1; i < = 4; i++)
{
cout< < " Введите a" < < i < < endl;
cin > > a;
s = s + *pa;
}
cout < < " Ответ " < < s < < endl;
}
| 4. Написать программу генерации элементов массива А из случайных чисел и их вывода двумя способами (с указателями и без них).
| Имя массива А без индекса является указателем-константой (не изменяется на протяжении всей работы программы), т. е. адресом первого элемента массива А[0].
Цикл, в котором генерируется и выводится массив A, содержащий sz элементов (от 0 до sz-1), можно реализовать двумя способами (во втором используются указатели):
1. for (i = 0; i < sz; i++) {A[i] = rand()%99; cout < < A[i] < < endl; }
2. for (i = 0; i < sz; i++) { *(A +i) = rand()%99; cout < < *(A + i) < < endl; }
| 5. Изучить отличия ссылок от указателей. Выполнить программы, записанные в правой части.
| Ссылку можно рассматривать как указатель, который всегда разыменовывается. Формат объявления ссылки: тип & имя; где тип - это тип величины, на которую указывает ссылка, & - оператор ссылки, означающий, что следующее за ним имя является именем переменной ссылочного типа, например: int коl; int & pal = kol;
Здесь pal - альтернативное имя для коl const char & CR = '\n '; // ссылка на константу
Использование ссылки
| Использование указателя
| #include < stdio.h>
void main()
{
int V = 1;
printf(" V = %d\n", V);
int & rV = V;
rV = 5;
printf(" V = %d\n", V);
}
| #include < stdio.h>
void main()
{
int V = 1;
printf(" V = %d\n", V);
int & rV = V;
rV = 5; int *pV = & rV;
printf(" V = %d\n", *pV);
}
| Между ссылкой и указателем существуют два основных отличия: ссылка обязательно должна быть инициализирована в месте своего определения; всякое изменение ссылки преобразует не ее, а тот объект, на который она ссылается.
| 6. Выполнить программу, приведенную в правой части, которая разработана с использованием указателей.
Внести изменения с тем, чтобы программа стала содержать ошибки. Исследовать их с помощью отладки.
| Пример. Пусть имеется массив А. Значения элементов массива инициализируются в программе. Удалить элемент с номером, который вводится с клавиатуры.
|
7. В соответствии с вариантом для задачи из последней таблицы лабораторной работы № 10 написать программу с использованием указателей.
В начало практикума
Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...
|
Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...
|
ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при которых тело находится под действием заданной системы сил...
|
Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...
|
|
Алгоритм выполнения манипуляции Приемы наружного акушерского исследования. Приемы Леопольда – Левицкого. Цель...
ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...
Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...
|
|
Психолого-педагогическая характеристика студенческой группы
Характеристика группы составляется по 407 группе очного отделения зооинженерного факультета, бакалавриата по направлению «Биология» РГАУ-МСХА имени К...
Общая и профессиональная культура педагога: сущность, специфика, взаимосвязь Педагогическая культура- часть общечеловеческих культуры, в которой запечатлил духовные и материальные ценности образования и воспитания, осуществляя образовательно-воспитательный процесс...
Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...
|
|