Що таке вказівники?
У C ++ вказівник посилається на змінну, яка містить адресу іншої змінної. Як і звичайні змінні, покажчики мають тип даних. Наприклад, покажчик цілого типу типу може містити адресу змінної цілого типу типу. Покажчик типу символу може містити адресу змінної типу символу.
Ви повинні бачити вказівник як символічне зображення адреси пам'яті. За допомогою покажчиків програми можуть імітувати виклик за посиланням. Вони також можуть створювати та керувати динамічними структурами даних. У C ++ змінна покажчика відноситься до змінної, що вказує на певну адресу в пам'яті, на яку вказує інша змінна.
У цьому підручнику з C ++ ви дізнаєтесь:
- Що таке вказівники?
- Адреси на C ++
- Синтаксис декларації покажчика
- Довідковий оператор (&) та оператор поваги (*)
- Покажчики та масиви
- NULL покажчик
- Покажчики змінних
- Застосування покажчиків
- Переваги використання покажчиків
Адреси на C ++
Щоб зрозуміти вказівники на C ++, ви повинні розуміти, як комп’ютери зберігають дані.
Коли ви створюєте змінну у своїй програмі на C ++, їй відводиться трохи місця в пам’яті комп’ютера. Значення цієї змінної зберігається у призначеному місці.
Щоб знати місце в пам’яті комп’ютера, де зберігаються дані, C ++ надає оператор & (посилання). Оператор повертає адресу, яку займає змінна.
Наприклад, якщо x є змінною, & x повертає адресу змінної.
Синтаксис декларації покажчика
Оголошення C ++ приймає такий синтаксис:
datatype *variable_name;
- Тип даних - базовий тип вказівника, який повинен бути дійсним типом даних C ++.
- Ім'я змінної_ має бути ім'ям змінної вказівника.
- Зірочка, використана вище для оголошення вказівника, подібна до зірочки, що використовується для виконання операції множення. Саме зірочка позначає змінну як покажчик.
Ось приклад дійсних оголошень покажчиків у C ++:
int *x; // a pointer to integerdouble *x; // a pointer to doublefloat *x; // a pointer to floatchar *ch // a pointer to a character
Довідковий оператор (&) та оператор поваги (*)
Оператор посилання (&) повертає адресу змінної.
Оператор розмежування (*) допомагає нам отримати значення, яке було збережено в адресі пам'яті.
Наприклад:
Якщо у нас є змінна з ім'ям num, що зберігається в адресі 0x234 і зберігає значення 28.
Посилальний оператор (&) поверне 0x234.
Оператор розвідки (*) поверне 5.
Приклад 1:
#includeusing namespace std;int main() {int x = 27;int *ip;ip = &x;cout << "Value of x is : ";cout << x << endl;cout << "Value of ip is : ";cout << ip<< endl;cout << "Value of *ip is : ";cout << *ip << endl;return 0;}
Вихід:
Як це працює:
Ось скріншот коду:
Пояснення коду:
- Імпортуйте файл заголовка iostream. Це дозволить нам використовувати функції, визначені у файлі заголовка, не отримуючи помилок.
- Включіть std простір імен, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Логіку програми слід додати в тілі цієї функції. Значок {позначає початок тіла функції.
- Оголосіть цілочисельну змінну x і присвоївши їй значення 27.
- Оголосіть змінну покажчика * ip.
- Зберігає адресу змінної x у змінній покажчика.
- Роздрукуйте текст на консолі.
- Надрукуйте значення змінної x на екрані.
- Роздрукуйте текст на консолі.
- Вивести адресу змінної x. Значення адреси зберігалося у змінній ip.
- Роздрукуйте текст на консолі.
- Значення друку, що зберігається за адресою вказівника.
- Після успішного виконання програма повинна повертати значення.
- Кінець тіла основної () функції.
Покажчики та масиви
Масиви та покажчики працюють на основі відповідної концепції. Є різні речі, на які слід звернути увагу при роботі з масивами, що мають покажчики. Саме ім'я масиву позначає базову адресу масиву. Це означає, що для призначення адреси масиву покажчику не слід використовувати амперсанд (&).
Наприклад:
p = arr;
Вищезазначене є правильним, оскільки arr представляє адресу масивів. Ось ще один приклад:
p = &arr;
Вищевказане є неправильним.
Ми можемо неявно перетворити масив у покажчик. Наприклад:
int arr [20];int * ip;
Нижче наведено дійсну операцію:
ip = arr;
Після вищезазначеної декларації ip та arr будуть еквівалентними, і вони будуть спільно використовувати властивості. Однак ip може бути призначена інша адреса, але ми не можемо призначити нічого для arr.
Приклад 2:
Цей приклад показує, як обходити масив за допомогою покажчиків:
#includeusing namespace std;int main() {int *ip;int arr[] = { 10, 34, 13, 76, 5, 46 };ip = arr;for (int x = 0; x < 6; x++) {cout << *ip << endl;ip++;}return 0;}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Оголосіть цілочисельну змінну вказівника ip.
- Оголосіть масив з іменем arr і збережіть у ньому 6 цілих чисел.
- Призначити arr для ip. Ip та arr стануть рівноцінними.
- Створіть для циклу. Змінна циклу x була створена для ітерації елементів масиву від індексу 0 до 5.
- Роздрукуйте значення, збережені за адресою IP-адреси вказівника. Повертається одне значення за ітерацію, і в цілому буде зроблено 6 повторень. Endl - це ключове слово C ++, яке означає кінцевий рядок. Ця дія дозволяє переміщати курсор до наступного рядка після друку кожного значення. Кожне значення буде надруковано в окремому рядку.
- Для переміщення вказівника в наступне внутрішнє положення після кожної ітерації.
- Кінець циклу for.
- Після успішного виконання програма повинна щось повернути.
- Кінець основного () елемента функції.
NULL покажчик
Якщо немає точної адреси, якій слід призначити, тоді змінній покажчика може бути призначено NULL. Це слід робити під час декларування. Такий покажчик відомий як нульовий покажчик. Його значення дорівнює нулю і визначається у багатьох стандартних бібліотеках, таких як iostream.
Приклад 3:
#includeusing namespace std;int main() {int *ip = NULL;cout << "Value of ip is: " << ip;return 0;}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Оголосіть покажчик змінної ip і присвоївши їй значення NULL.
- Вивести значення змінної ip покажчика поряд з деяким текстом на консолі.
- Після успішного завершення програма повинна повертати значення.
- Кінець тіла основної () функції.
Покажчики змінних
За допомогою C ++ ви можете обробляти дані безпосередньо з пам'яті комп'ютера.
Простір пам'яті може бути призначений або перепризначений як завгодно. Це стало можливим завдяки змінним Pointer.
Змінні покажчика вказують на певну адресу в пам’яті комп’ютера, на яку вказує інша змінна.
Це можна оголосити наступним чином:
int *p;
Або,
int* p;
У наведеному вами прикладі ми оголосили змінну вказівника p.
Він буде містити адресу пам'яті.
Зірочка - це оператор розвідки, що означає вказівник на.
Покажчик p вказує на ціле значення в адресі пам'яті.
Приклад 4:
#includeusing namespace std;int main() {int *p, x = 30;p = &x;cout << "Value of x is: " << *p;return 0;}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Оголосіть змінну покажчика p та змінну x зі значенням 30.
- Призначте адресу змінної x р.
- Надрукуйте значення змінної вказівника p поряд з текстом на консолі.
- Після успішного завершення програма повинна повертати значення.
- Кінець тіла основної () функції.
Застосування покажчиків
Функції в C ++ можуть повертати лише одне значення. Далі, всі змінні, оголошені у функції, розподіляються у стеку викликів функції. Як тільки функція повертається, усі змінні стека знищуються.
Аргументи до функції передаються за значенням, і будь-яка модифікація змінних не змінює значення фактичних переданих змінних. Наступний приклад допомагає проілюструвати цю концепцію: -
Приклад 5:
#includeusing namespace std;void test(int*, int*);int main() {int a = 5, b = 5;cout << "Before changing: << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;test(&a, &b);cout << "\nAfter changing" << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;}void test(int* n1, int* n2) {*n1 = 10;*n2 = 11;}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Створіть прототип функції з іменем test, яка буде приймати два цілих параметри.
- Виклик функції main (). Ми додамо логіку програми всередині її тіла.
- Оголосіть дві цілочисельні змінні a і b, кожна зі значень 5.
- Роздрукуйте текст на консолі. Endl (кінцевий рядок) переміщує курсор, щоб розпочати друк у наступному рядку.
- Надрукуйте значення змінної a на консолі поряд з іншим текстом. Endl (кінцевий рядок) переміщує курсор, щоб розпочати друк у наступному рядку.
- Надрукуйте значення змінної b на консолі поряд з іншим текстом. Endl (кінцевий рядок) переміщує курсор, щоб розпочати друк у наступному рядку.
- Створіть функцію з іменем test (), яка приймає адреси змінних a та b як параметри.
- Роздрукуйте текст на консолі. \ N створить новий порожній рядок перед друком тексту. Endl (кінцевий рядок) переміщує курсор, щоб розпочати друк у наступному рядку після друку тексту.
- Надрукуйте значення змінної a на консолі поряд з іншим текстом. Endl (кінцевий рядок) переміщує курсор, щоб розпочати друк у наступному рядку.
- Надрукуйте значення змінної b на консолі поряд з іншим текстом. Endl (кінцевий рядок) переміщує курсор, щоб розпочати друк у наступному рядку.
- Після успішного завершення програма повинна повертати значення.
- Кінець тіла основної () функції.
- Визначення функціонального тесту (). Функція повинна приймати дві цілочисельні змінні покажчика * n1 та * n2.
- Присвоєння змінної покажчика * n1 значення 10.
- Присвоєння покажчику змінної * n2 значення 11.
- Кінець основного тесту функції ().
Навіть Незважаючи на те, що новим значенням присвоюються змінні a та b всередині тесту функції, як тільки виклик функції завершиться, це не відображається на зовнішній функції main.
Використання покажчиків як аргументів функції допомагає передавати фактичну адресу змінної у функцію, і всі зміни, внесені до змінної, будуть відображені у зовнішній функції.
У наведеному вище випадку функція 'test' має адресу змінних 'a' та 'b.' Ці дві змінні є безпосередньо доступними з функції 'test', і, отже, будь-які зміни, внесені до цих змінних, відображаються у функції виклику "main".
Переваги використання покажчиків
Ось плюси / переваги використання покажчиків
- Покажчики - це змінні, які зберігають адресу інших змінних у C ++.
- Більше однієї змінної можна змінити і повернути функцією за допомогою покажчиків.
- Пам'ять може бути динамічно розподілена та розподілена за допомогою покажчиків.
- Покажчики допомагають спростити складність програми.
- Швидкість виконання програми покращується за допомогою покажчиків.
Короткий зміст:
- Покажчик посилається на змінну, що містить адресу іншої змінної.
- Кожен покажчик має дійсний тип даних.
- Покажчик - це символічне представлення адреси пам'яті.
- Покажчики дозволяють програмам імітувати виклик за посиланням та створювати та керувати динамічними структурами даних.
- Масиви та покажчики використовують пов’язане поняття.
- Ім'я масиву позначає базу масиву.
- Якщо ви хочете призначити адресу масиву покажчику, не використовуйте амперсанд (&).
- Якщо немає конкретної адреси для призначення змінної покажчика, присвойте їй NULL.