Вказівники в мові C++, Оголошення та ініціалізація вказівників, Оператор розіменування, Динамічне створення змінної та вивільнення пам’яті, Використання динамічних масивів
1. Вказівники в мові C++
Вказівники в мові C++...........................................................................................1
Оголошення та ініціалізація вказівників .............................................................1
Оператор розіменування .....................................................................................1
Динамічне створення змінної та вивільнення пам’яті........................................2
Використання динамічних масивів......................................................................2
Оголошення та ініціалізація вказівників
В комп’ютерній пам’яті для кожної змінної відводиться деяка комірка, яка має свою фізичну
адресу. Ми можемо створювати змінні для зберігання адрес комірок. Такі змінні називаються
вказівниками. При оголошенні вказівника, задаємо тип даних, на який він вказує та перед його
назвою ставимо символ астериску *:
int * p; //Оголошення вказівника
int *p1; //Можна без пробілу
int *p2, *p3; //Оголошення декількох вказівників в одному рядку (небажано)
Для присвоювання вказівнику адреси змінної використовуємо оператор &.
int b = 123;
int * pnt = &b; //Вказівник pnt містить адресу змінної b
cout << pnt << endl; //Вивід фізичної адреси змінної
Отже, вказівник зберігає не значення, а адресу змінної.
Оператор розіменування
Для того, щоб отримати значення змінної, на яку вказує даний вказівник, використовуємо
оператор розіменування *:
int a = 123;
int *pnt = &a;
int b = *pnt; //123 - значення, на яке вказує вказівник
*pnt = 1234; //В комірку з адресою вказівника записуємо нове значення
cout << a << endl; //1234
Вказівник pnt відповідає адресі змінної a, *pnt відповідає значенню 123, збереженому за даною
адресою. Отже, при звертанні до вказівника без оператора розіменування, ми отримуємо
значення самого вказівника – адресу, на яку він вказує. Якщо перед вказівником стоїть оператор
розіменування, то даний вказівник звертається до значення на який він вказує. До речі, слід
відрізняти символ * при оголошенні вказівника та оператор розіменування *.
2. Динамічне створення змінної та вивільнення пам’яті
Інколи при створенні змінних після їх роботи нам потрібно вивільнити пам'ять цих змінних. Для
цього можна використати вказівники:
int * p = new int; //Оголошення динамічної змінної через вказівник
* p = 123; //Присвоєння значення змінній
delete p; //Вивільнення пам'яті
Динамічну змінну можна ініціалізувати при оголошенні:
int * p = new int(123); //Ініціалізація динамічної змінної
Використання динамічних масивів
В мові C++ за допомогою вказівників ми можемо працювати з динамічними масивами:
#include <iostream>
using namespace std;
int output(int * arr, int arr_size){
for (int i = 0; i< arr_size; i++){
cout<<arr[i]<<" ";
}
}
int main()
{
int n;
cin >> n; //Розмір масиву
int * a = new int[n]; //Оголошення динамічного масиву
//Заповнення масиву даними
for(int i = 0; i<n; i++) {
a[i] = i;
}
output(a, n); //Виклик функції з передачею вказівника на масив
delete[] a; //Вивільнення пам'яті від масиву
return 0;
}