Змінні вказівники
Адресний простір обмежений. Можливість дізнатися, де саме в пам’яті розміщені змінні, корисна, а бачити саме значення адреси потрібно досить рідко. Зате дуже потрібними були б змінні, що зберігають адреси. Такі змінні цілковито аналогічні до змінних, які зберігають числа чи знаки. Змінна, що містить в собі значення адреси, називається змінною-вказівником чи просто вказівником.
Змінна-вказівник не того ж типу, що змінна, адресу якої вона зберігає. В програмі 20.2 показаний синтаксис змінних-вказівників.
#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;
}
Програма 20.2
В цій програмі визначені дві цілочисельні змінні var1 і var2, які ініціалізовані значеннями 11 і 22. Потім програма виводить на дисплей їх адреси.
Далі в програмі визначена змінна-вказівник в рядку
int* ptr;
Зірочка означає вказівник на. Отже, в цьому рядку визначена змінна ptr як вказівник на int, тобто ця змінна може містити в собі адресу змінної типу int. На відміну від Паскалю, в С++ не використовуються нетипізовані вказівники Pointer. Тобто, вказівник в С++ завжди вказує на якийсь конкретний тип.
Слід відмітити, що загальноприйнято визначати вказівник за допомогою зірочки, що пишеться перед іменем змінної, а не зразу після назви типу:
char *charptr;
Це не принципово для компілятора, але зірочка, розміщена відразу після назвою типу змінної, сигналізує, що це не просто тип, а вказівник на нього.
Якщо ми визначаємо в одному рядку більш ніж один вказівник одного і того ж типу, то зірочку необхідно ставити перед іменем кожної змінної:
char* ptr1, *ptr2, *ptr3;
І в такому випадку можна використати стиль написання, при якому зірочка ставиться поруч з іменем:
char *ptr1, *ptr2, *ptr3;
Вказівнику обов’язково повинне бути присвоєне якесь значення, інакше він вказуватиме на випадкову адресу. Неініціалізований вказівник може призвести до краху системи, між тим, компілятор не виявляє помилок такого виду.
Дата добавления: 2015-08-26; просмотров: 628;