Мета:
Здобути навики використання середовища розробки мови C++, познайомитися з технікою показників, придбати навички застосування показників при створені програм на мові С++.
Короткі теоретичні відомості до роботи.
Показник – це змінна цілого числа, яка містить адресу(номер комірки пам’яті) іншої змінної. Як усяка змінна, показник повинний бути оголошений (об’ялений).
Наприклад:
float a, * aP;
int *iP, I;
char c, *cP;
Оголошені змінні a, I, c різних типів float, int, char і показники aP, iP, cP. Знак * вказує, що це об’явлений показник, і відносяться тільки до наступного ідентифікатору. У принципі ідентифікатор показника може бути будь-яким, але запропонований варіант нагадує програмісту, що ця змінна – показник (pointer).
Так як показник є адреса, а адреси розподіляє сам комп’ютер, тому показник не може безпосередньо ініціалізовний. Операція адресації, тобто присвоєння об’яленому показнику адреси змінної, виконується наступним чином:
float a = 6, * aP; aP = &a;
int *iP, i = 2; iP = &i;
char c = ‘$’, *cP; cP = &c;
Знак & перед змінною повертає її адресу. Для того, щоб отримати значення змінної, виконується операція разименування. Знак * перед показником повертає значення змінної, на котру показник посилається.
|
|
float a1; a1 = * aP;
int i1; i1 = *iP;
char c1; c1 = *cP;
У результаті маємо:
a1 = 6.; i1 = 2; c1 = ‘$’;
Ім’я змінної прямо відсилається до її значення, а показник – непрямо. Посилання на значення за допомогою показника називається непрямою (косвенною) адресацією. Операція адресації і разименування взаємно компенсують один одного при їх застосуванні до показника послідовно у будь-якому порядку:
&*aP еквівалентно *&P
До показника застосовується операція cout<<.
Звертає на себе увагу те, що об’ява показника співпадає з формулою разименування, тому її можна рахувати в деякому роді другим, але непрямою об’явою змінної.
Розглянемо програму, де значення показників виводяться у 16-річній системі числення.
//файл PART3\3_01.ccp – зв'язок змінних і показників
#include “c:\CPP\SUBPROG\\roll.h”
#include “c:\CPP\SUBPROG\\roll_txt.h”
#include <iomanip.h>
main() { clrscr();
float a = 16.07, *aP, a1; //об’ява змінних
int i = 2; *iP, i1; //і показників
aP = &a; iP = &I; //адресація
a1 = *aP; i1 = *iP; //разименування
cout<<”\n значення показник значення ‘
<< “\n змінної змінної\n”
<<setw(11)<<a<<” “<<aP<< setw(13)<<a1
<<”\n”<< setw(11)<<i<<” “<<iP<< setw(13)<<i1;
cout<<”\n\n взаєм. компенс. операцій * і &‘
<<”\n &*aP=”<<&*aP
<<”\n *&aP=”<<*&aP;
cout<<”\n кінець задачі “;
pause (0); return 0;}