Методичні вказівки до виконання практичних та лабораторних робіт з курсу «Обчислювальна техніка та програмування», страница 10

p=&a;,

то вираз “++*p; //*p=*p+1;” означає - збільшити значення змінної цілого типу a       //на  одиницю (a=2).

Як видно, з описаного вище прикладу, унарна операція разіменування '*‘, що використовується в тілі програми, ідентифікується компілятором по наявності відповідного оголошення покажчика.

При програмуванні з використанням змінних типу покажчик необхідно звертати особливу увагу на порядок виконання дій. Наприклад:

*p++;//відповідає (p+1) або (*p) ++

++*p;//*p=*p+1

Вектори. Тісний зв'язок з покажчиками має визначений в мові C++ тип даних - вектор. Вектори- це структурований тип даних, який являє собою безперервні блоки пам'яті, що містять безліч елементів одного і того же типу. Ознакою вектору при описі є наявність парних квадратних дужок [].

Вектор описується шляхом вказівки типу елементів, імені і квадратних дужок. Додатна константа або константний вираз, всередині квадратних дужок, задає число елементів вектору. Елементи вектору нумеруються з 0. Наприклад:

long arr1 [32];

char arr2 [79];,

Де проголошені вектори arr1, що містять 32 елементи типу long і arr2, що містить 79 елементів типу char.

      В C++ розв'язані два засоби доступу до елементів вектору: з використанням механізму покажчиків; класичний - з допомогою індексу. Доступ до елементів вектора шляхом вказівки назви імені та індексу в квадратних дужках не вимагає особливого пояснення, оскільки широко використовується практично в усіх мовах програмування. Застосування же механізму покажчиків засноване на використанні факту, що ім'я вектора є покажчиком - константою, рівній адресі початку вектора - першого байта першого елементу вектора (arr1==&arr1 [0]). В результаті цього, використовуючи операцію разіменувания “” можна забезпечити доступ до будь-якого елементу вектора. Так, еквівалентні будуть звернення до i-го елементу вектора з використанням індексу - arr1 [i] і заслання *(arr1+i), оскільки

 (arr1+i) ==&arr1 [i].

Слідує звернути увагу, що вираження *(arr1+1) не еквівалентно помилковому *(arr1++), оскільки arr1 є покажчик константа. При використанні операції інкремента (декремента) необхідно визначити проміжну змінну - покажчик. Наприклад, наступне визначення змінних

int arr [20];

int*ukar=&arr [0];

дозволяє, в операторах циклу, для доступу до елементів використати вираз

 *ukar++.

При описі вектора може бути виконана ініціалізація його елементів. В C++ визначені два правила ініціалізації: за замовчанням; явна ініціалізація.

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

Явна ініціалізація вектору виробляється шляхом завдання набору початкових значень елементів, поділених комами та укладених в фігурні дужки, за такою формою:

int b [3] ={1, 2.3};//b [0] =1, b [1] =2, b [2] =3

В мові С++ допускається неминучість значення індексу вектора і числа початкових значень елементів. Коли число початкових значень менш значення індексу то иніціалізують тільки перші елементи вектора, а інші або дорівнюються нулю, або не визначені. Наприклад:

int b [3] ={1};//b [0] =1, b [1] =0, b [2] =0

Якщо число початкових значень більше значення індексу то буде з генероване повідомлення про помилку.

int b [3] ={1, 2.3, 4};//помилка

Масиви. В відзнаці від інших мов високого рівня в С++ вектори мають тільки одну вимірність. Багатовимірні масиви в С++ представляються у вигляді векторів покажчиків на вектори - багатовимірні вектори. Багатовимірні  вектори описуються наступним чином

int V[3][3];//3 вектори з 3 int кожний

float BV[5][5][5];//5 векторів покажчиків на 5 векторів з 5 float

Синтаксис мови С++ не накладає обмежень на вимірність векторів. Однак, реально використовуються вимірності не вище трьох.