Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л4. Оператори циклу_Вказ_вники.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
87.55 Кб
Скачать

4. Ініціалізація вказівників.

1. Присвоєння вказівнику адреси існуючого об’єкта

а) &

int a=5;

int *p=&a;

або int *p(&a);

б) за допомогою іншого ініціалізованого вказівника. У випадку вказівника на вказівник, перший вказівник містить адресу другого вказівника, який в свою чергу містить адресу комірки пам’яті, в якій міститься деяке значення int **pp=&p;

в) за допомогою імені масиву або функцій, які трактуються як вказівники

int b[10];

int *t=b;

void f(int a) {…};

void (*pf) (int);

pf=f;

2. Присвоєння вказівнику адреси ділянки пам’яті явним чином:

char *vp=(char*)0xB8000000;

3. Присвоєння вказівнику порожнього значення

int *s = NULL;

int*r = 0; як ціла константа

4. Виділення ділянки динамічної пам’яті і присвоєння її адреси вказівнику

С++ : int *n=new int;

int *m=new int(10); // ініціалізатор для динамічної змінної, на яку вказує m

або *m=10;

int *q=new int [10]; // масив

....

delete n; delete m;

delete q[];

C : int *n = (int *) malloc;

(sizeof (int));

free(n);

Приклад: int *(*p[10]) (); // масив і 10 вказівників на функції типу int *

Операції з вказівниками.

Над вказівниками визначені арифметичні операції та операції порівняння, описані в табл.

Операція

Приклад і пояснення

==, !=, >=, <=, >, <

Порівняння значення двох вказівників (адреси, на які вони вказують). Наприклад, якщо вказівники вказують на одне і те ж саме дане, то результатом порівняння vk1 == vk2 буде істина, інакше – фальш

vk1 – vk2. Використовується для визначення кількості елементів, які наявні між двома вказівниками

+, –

vk1 + k, vk1 – k. Знаходить вказівник, який зміщений відносно даного на k одиниць.

++

Інкремент

– –

Декремент

Докладніше див. Лабораторна робота 4 (розділ – робота з вказівниками)

Типові помилки програмування при роботі з вказівниками.

  1. Використання арифметичних дій з вказівниками, що посилаються не на елементи масиву.

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

  3. Вихід за межі масиву при використанні арифметичних дій з вказівниками.

  4. Присвоювання вказівника одного типу вказівнику іншого типу (відмінного від void*) викликає синтаксичну помилку.

  5. Розіменування вказівника на void*.

5. Посилання

Посилання – це синонім імені, вказаного при ініціалізації посилання.

Формат опису <тип> &<ім’я>

Приклад. int k; int &h = k;

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

Типові обмеження та помилки програмування при роботі з посиланнями.

Обмеження:

  1. Не можна взяти адресу змінної типу посилання.

  2. Забороняється використовувати масиви посилань

  3. Не допускаються посилання на бітові поля.

  4. Не можна створити вказівник на посилання.

Помилки:

  1. При оголошенні множини посилань & не вказується для кожного посилання.

  2. При оголошенні змінна-посилання на ініціалізована.

  3. Спроба присвоїти попередньо оголошене посилання як псевдонім іншої змінної.

  4. Повернення вказівника або посилання автоматичній змінній у функцію, яку викликають.