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

11.1.5Нетипізовані вказівники

У мові С можна використовувати покажчики, які не пов’язані з якимось конкретним типом і сумісні покажчиками на будь які типи даних. Використання безтипових дозволяє підвищувати ефективність створюваних програм. Без типові покажчики оголошуються із ключовим словом void:

void *pz;

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

Розглянемо приклад, який дозволяє отримати доступ до двох половин числа типу long (long удвічі більший за int).

ulong number = 0x12AB34DC;

uint part1, part2;

void *p= &number;

part1=*(uint*)p;

part2=*((uint*)p+1)

У цьому прикладі ми розрізали число number типу long на числа part1та part2 типу int.

Завдання для самостійної роботи

В лабораторній роботі слід створити проект, передбачає реалізацію таких функцій у проекті:

  • виведення на консоль у вигляді таблиці значень чисел у десятковому та шістнадцятковому форматі, та їх адрес у оперативній пам’яті для типів int, long, float, double, char, bool;

  • представити ті самі числа у вигляді окремих байтів та вивести їх на консоль;

  • виконати без комп’ютера, а потім перевірити результат за допомогою комп’ютера приклад із підручника [4], стр.120:

//Дано:

int mvr[100];

int *pm = mvr;

int a, *px = pm;

//Треба знайти результат кожного з наступних операторів:

pm++;

a = *pm++;

a = (*pm)++;

a = *++pm;

a = ++*pm;

*px++ = *pm++;

  • виконати без комп’ютера, а потім перевірити результат за допомогою комп’ютера приклад 3 із підручника [4], стр.124:

//Яким буде х після виконання даної програми:

int x, *vk;

vk=&x; x=5;

*vk = x * 5;

x+=*vk;

  • виконати без комп’ютера, а потім перевірити результат за допомогою комп’ютера приклад 8 із підручника [4], стр.124:

//Яким буде n після виконання даної програми:

double *px;

double * const py = (double*)200;

int n = 0;

px = py +50;

px += 10;

px = px >= (double*) 600 ? px – 10 : NULL ;

if (px !=NULL)

n = px - py;

Вимоги до звіту

  • Назва роботи.

  • Мета роботи.

  • Короткий опис основних понять, пов’язаних з покажчиками.

  • Тексти виконаних завдань з проміжними та конечними результатами.

  • Результати тестування проекту у вигляді копій консолі.

  • Висновки.

Контрольні питання

  • Визначення поняття покажчик.

  • Оголошення та ініціалізація покажчиків.

  • Звернення до даних через покажчики.

  • Використання кваліфікатора const для покажчиків.

  • Адресна арифметика.

  • Нетипізовані вказівники.

  • Протестувати програму обробки покажчиків наданої викладачем.

Рекомендована література

  1. Берн Страуструп. Язык программированя С++. Второе дополненное издание. – М: Бином-Пресс, 2008. – 369 с

  2. Прата Стивен. Язык программирования С++. Лекции и упражнения. Учебник: Пер. с англ./Стивен Прата – СПб.:ООО «ДиаСофтЮП», 2003. –1104 с.

  3. Шилдт Герберт. Полный справ очник по С++. Пер. с англ. – М: Вильямс, 2004. 783 с.

  4. Шпак З.Я. Програмування мовою С. – Львів: Оріяна-Нова, 2012. – 432с.