Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Варианты по С1.doc
Скачиваний:
38
Добавлен:
23.02.2016
Размер:
808.45 Кб
Скачать

Лабораторна робота № 4. Вказівники та операції над ними

Рекомендації до виконання лабораторної роботи

Завдання 4.1. Визначення і використання вказівників

    1. Напишіть програму, в якій вводиться декілька змінних різних типів, наприклад, int, char, float, double, з надання їм початкових значень.

    2. Визначіть декілька вказівників, серед яких повинні бути:

  • вказівники, ініціалізовані адресами визначених змінних;

  • порожні або нульові вказівники;

  • неініціалізовані вказівники.

    1. За допомогою операції ’=’ надайте нульовим вказівникам значення адрес визначених Вами змінних або вже ініціалізованих вказівників (не слід забувати про важливість в цьому випадку відповідності типів).

    2. Використовуючи команду new зарезервуйте область динамічної пам’яті, її адресу присвойте вказівникам, що не були ініціалізовані спочатку і запишіть туди значення відповідного типу.

    3. Застосувавши до вказівників унарну операцію розіменування (звернення за адресою), виведіть на екран вміст областей пам’яті, адреси яких є значеннями вказівників.

    4. Спробуйте змінити значення деяких змінних через відповідні їм вказівники. Виведіть на екран значення цих змінних.

1.5. Виведіть на екран адреси декількох змінних, а також значення та адреси відповідних їм вказівників.

Завдання 4.2. Програма, що демонструє віднімання вказівників

Наберіть наведену нижче програму:

#include <iostream.h>

void main()

{ char ac=’f’, bc=’2’;

char *pac=&ac, *pbc=&bc;

long int al=3, bl=4;

long int *pal=&al, *pbl=&bl;

cout << “\nЗначення і різниця вказівників: ”;

cout<< “\npac= “<< (void*)pac<<”\tpbc= ”<<(void*)pbc;

cout<< “\t(pac-pbc)= ”<< (pac-pbc);

cout<< “\npal= “<< pal<<”\tpbl= ”<<pbl<<“\t(pbl-pal)=”<< (pbl-pal);

cout<< “\nРізниця числових значень вказівників: ”;

cout<< “\n(int)pac-(int)pbc= ”<<(int)pac-(int)pbc;

cout<< “\n(int)pbl-(int)pal= ”<< (int)pbl-(int)pal; }

Поясніть одержані результати.

Аналізуючи програму та дані на екрані слід пам’ятати, що:

  • найменшою одиницею пам’яті, яка адресується, є байт.

  • адреси областей пам’яті – це цілочисельні шістнадцяткові константи. Змінні при їх визначенні розміщуються у пам’яті послідовно, займаючи суміжні комірки пам’яті. Проте розміщення об’єктів у пам’яті є оберненим в порівнянні з їх взаємним розташуванням у визначеннях тексту програми. Тобто змінна, яка визначена в програмі останньою, розміщується у комірці пам’яті з найстаршою адресою.

  • різниця двох вказівників одного типу є відстанню між двома областями пам’яті, що кратна довжині (в байтах) об’єкту того типу, який адресує вказівник. Різниця однотипних вказівників, що адресують суміжні об’єкти, за абсолютною величиною рівна одиниці.

Завдання 4.3. Арифметичні дії над вказівниками

Напишіть програму, початком якої буде :

#include <iostream.h>

void main()

{ float zero=0.0, pi=3.141593, Euler=2.718282;

float *ptr=&Euler; …}

Шляхом додавання до визначеного вказівника константи (k) (тобто пересуваючись між ділянками пам’яті на величину k*(sizeof(type)) виведіть на екран значення двох інших змінних. Що потрібно змінити в програмі, щоб замість додавання використати віднімання константи, операції інкременту або декременту?