Доступ до змінної за вказівником
Припустімо, що ми не знаємо імені змінної, але знаємо її адресу. Чи можемо ми дістати доступ до цієї змінної?
Існує спеціальний запис, призначений для доступу до значення змінної, використовуючи її адресу замість імені. В програмі 20.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. Зірочка, яка стоїть перед іменем змінної, називається операцією розіменування.
Вказівники можна використовувати не тільки для одержання значення змінної, на яку він вказує, але і для виконання дій з цими змінними. Програма 20.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;
}
Програма 20.4
Зірочка, що використовується в операції розіменування – не те саме, що зірочка, яка використовується при оголошенні вказівника. Операція розіменування випереджає ім’я змінної і означає значення, що знаходиться в змінній, Натомість зірочка в оголошенні вказівника означає вказівник на.
int* ptr; //оголошення, вказівник на
*ptr=37; //розіменування
Доступ до значення змінної, що зберігається за адресою, з використанням операції розіменування, називається непрямим доступом або розіменуванням вказівника.
Дата добавления: 2015-08-26; просмотров: 596;