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
Синтаксис мови С++ не накладає обмежень на вимірність векторів. Однак, реально використовуються вимірності не вище трьох.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.