Припустімо, що ми не знаємо імені змінної, але знаємо її адресу. Чи можемо ми дістати доступ до цієї змінної?
Існує спеціальний запис, призначений для доступу до значення змінної, використовуючи її адресу замість імені. В програмі 12.3 показано, як це можна зробити.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<bios.h>
int main()
{clrscr();
int var1=11;
int var2=22;
cout<<"&var1="<<&var1<<endl;
cout<<"&var2="<<&var2<<endl<<endl;
int* ptr;
ptr=&var1;
cout<<*ptr<<endl;
ptr=&var2;
cout<<*ptr<<endl;
bioskey(0);
return 0;
}
Ця програма дуже схожа на попередню з тією різницею, що замість виведення на екран адреси, що зберігається в змінній, ми виводимо значення, яке за цією адресою зберігається. Вираз *ptr дозволяє нам одержати значення змінних var1 і var2. Зірочка, яка стоїть перед іменем змінної, називається операцією розіменування.
Вказівники можна використовувати не тільки для одержання значення змінної, на яку він вказує, але і для виконання дій з цими змінними. Програма 12.4 використовує вказівник для присвоєння значення одній змінній, а потім іншій.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<bios.h>
int main()
{clrscr();
int var1,var2;
int* ptr;
ptr=&var1;
*ptr=37;
var2=*ptr;
cout<<var2<<endl;
bioskey(0);
return 0;
}
Програма 12.4
Зірочка, що використовується в операції розіменування – не те саме, що зірочка, яка використовується при оголошенні вказівника. Операція розіменування випереджає ім’я змінної і означає значення, що знаходиться в змінній, Натомість зірочка в оголошенні вказівника означає вказівник на.
int* ptr; //оголошення, вказівник на
*ptr=37; //розіменування
Доступ до значення змінної, що зберігається за адресою, з використанням операції розіменування, називається непрямим доступом або розіменуванням вказівника.