Лабораторная работа № 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 написать программу с использованием указателей.
В начало практикума
Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...
|
ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при которых тело находится под действием заданной системы сил...
|
Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...
|
Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...
|
|
Что такое пропорции?
Это соотношение частей целого между собой. Что может являться частями в образе или в луке...
Растягивание костей и хрящей. Данные способы применимы в случае закрытых зон роста.
Врачи-хирурги выяснили...
ФАКТОРЫ, ВЛИЯЮЩИЕ НА ИЗНОС ДЕТАЛЕЙ, И МЕТОДЫ СНИЖЕНИИ СКОРОСТИ ИЗНАШИВАНИЯ Кроме названных причин разрушений и износов, знание которых можно использовать в системе технического обслуживания и ремонта машин для повышения их долговечности, немаловажное значение имеют знания о причинах разрушения деталей в результате старения...
|
|
Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2
Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК.
Решение. Подставим данные задачи в уравнение закона разбавления
К = a2См/(1 –a) =...
Экспертная оценка как метод психологического исследования Экспертная оценка – диагностический метод измерения, с помощью которого качественные особенности психических явлений получают свое числовое выражение в форме количественных оценок...
В теории государства и права выделяют два пути возникновения государства: восточный и западный Восточный путь возникновения государства представляет собой плавный переход, перерастание первобытного общества в государство...
|
|