Лабораторная работа № 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 написать программу с использованием указателей.
В начало практикума
Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...
|
Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...
|
Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...
|
Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...
|
|
Краткая психологическая характеристика возрастных периодов.Первый критический период развития ребенка — период новорожденности Психоаналитики говорят, что это первая травма, которую переживает ребенок, и она настолько сильна, что вся последующая жизнь проходит под знаком этой травмы...
РЕВМАТИЧЕСКИЕ БОЛЕЗНИ Ревматические болезни(или диффузные болезни соединительно ткани(ДБСТ))— это группа заболеваний, характеризующихся первичным системным поражением соединительной ткани в связи с нарушением иммунного гомеостаза...
Решение Постоянные издержки (FC) не зависят от изменения объёма производства, существуют постоянно...
|
|
Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри:
Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...
Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...
Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы:
1) первичные...
|
|