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

Вказівники і адреси

Вказівник - це адреса пам'яті, що розподіляється для розміщення ідентифікатора (як ідентифікатор може виступати ім'я змінної, масиву, структури, рядкового літералу). У тому випадку, якщо змінна оголошена як вказівник, то вона містить адресу пам'яті, по якому може знаходиться скалярна величина будь-якого типу. При оголошенні змінної типу вказівник, необхідно визначити тип об'єкта даних, адреса яких буде містити змінна, і ім'я вказівника з попередньою зірочкою (чи групою зірочок). Формат оголошення вказівника:

специфікатора-типу [ модифікатор ] * описувач.

Специфікатор-типу задає тип об'єкта і може бути будь-якого основного типу, типу структури. Задаючи замість специфікатора-типу ключове слово void, можна своєрідним чином відстрочити специфікацію типу, на який посилається вказівник. Змінна, що повідомляється як вказівник на тип void, може бути використана для посилання на об'єкт будь-якого типу. Однак для того, щоб можна було виконати арифметичні і логічні операції над вказівниками чи над об'єктами, на які вони вказують, необхідно при виконанні кожної операції явно визначити тип об'єктів. Такі визначення типів можуть бути виконані за допомогою операції приведення типів.

Як модифікатори при оголошенні вказівника можуть виступати ключові слова const, near, far, huge. Ключове слово const вказує, що вказівник не може бути змінений у програмі. Розмір змінної оголошеної як вказівник, залежить від архітектури комп'ютера і від використовуваної моделі пам'яті, для якої буде компілюватися програма. Вказівники на різні типи даних не обов'язково повинні мати однакову довжину.

Для модифікації розміру вказівника можна використовувати ключові слова near, far, huge.

Приклади:

unsigned int * a; /* змінна а являє собою вказівник

на тип unsigned int (цілі числа без знака) */

double * x; /* змінна х вказує на тип даних з

крапкою подвійної точності, що плаває, */

char * fuffer ; /* з'являється вказівник з ім'ям fuffer

який вказує на змінну типу char */

double nomer;

void *addres;

addres = & nomer;

(double *)addres ++;

/* Змінна addres оголошена як вказівник на об'єкт будь-якого типу. Тому їй можна привласнити адресу будь-якого об'єкта (& - операція обчислення адреси). Однак, як було відзначено вище, жодна арифметична операція не може бути виконана над вказівником, поки не буде явно визначений тип даних, на які він вказує. Це можна зробити, використовуючи операцію приведення типу (double *) для перетворення addres до вказівника на тип double, а потім збільшення адреси. */

const * dr;

/* Змінна dr оголошена як вказівник на константний вираз, тобто значення вказівника може змінюватися в процесі виконання програми, а величина, на яку він вказує, немає. */

unsigned char * const w = &obj.

/* Змінна w оголошена як константний вказівник на дані типу char unsigned. Це означає, що на протязі усієї програми w буде вказувати на ту саму область пам'яті. Зміст цієї області може бути змінено. */

Лекція 15

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]