Які покажчики в C ++?
Вказує на найпотужніший інструмент c ++, він допомагає програмісту отримати доступ та керувати пам'яттю безпосередньо. Наприклад, коли створюється змінна, завданням компілятора є розподіл пам'яті для зберігання значення змінної. І це значення отримується за допомогою імені змінної, призначеної даним. C ++ має сумісність для зберігання та отримання даних із пам'яті, що посилаються на адресу місця, в якому зберігаються дані. C ++ навіть виконує покажчики на покажчику.
Синтаксис
Загальний формат декларації вказівника:
Data_type * pointer -variable-name
Зауважте, що змінній вказівника повинна передувати зірочка (*)
Приклад: int * xptr;
Змінна xptr є вказівником на ціле число. Загалом, змінні вказівника можуть вказувати на цілі змінні, символьні змінні, масиви, файли, функції.
Навіщо нам потрібні вказівники на C ++?
Динамічне розподіл пам’яті спрощується в C ++ за допомогою покажчиків, найвизначніше значення покажчиків полягає в тому, що вони значно ефективніші для обробки різних типів даних. Вони збільшують швидкість виконання, коли функція повертає одне значення, а також надають доступ до змінної, визначеної поза функцією. Найбільш поширене використання включає управління даними та доступ до функцій члена класу.
Як створити покажчики в C ++?
Ось наступні кроки для створення покажчиків у C ++
Крок №1 - Ініціалізація покажчиків
Доцільно ініціалізувати змінні вказівника, як тільки вони оголошені. Оскільки змінні вказівника зберігають адреси, вони можуть адресувати будь-яку частину пам'яті.
int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer
Розглянемо наступний приклад:
int p, * pi; // Цей вислів дає змогу компілятору зарезервувати простір для змінної p в пам'яті для збереження цілого значення.
pi = & a; // Призначає адресу цілочисельної змінної p змінної вказівника. Наприклад, якщо адреса p становить 4581, то значення * pi буде дорівнює 4581.
Крок №2 - Вказівник недійсний
Тут змінна вказівника дозволена вказувати на будь-який тип даних, і цей тип використовується для передачі покажчиків для функціонування, які працюють незалежно від типу даних, на який вказано.
Синтаксис: змінну * void * pointer;
Приклад:
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
Вихід:
$ g ++ -о основний * .cpp
$ основний
значення, вказане iv, дорівнює 3
Адреса x 0x7ffefbbee6d4
значення, вказане fv, становить 45, 2
Адреса f - 0x7ffefbbee6d0
Адреса x 0x7ffefbbee6d4
адреса f 0x7ffefbbee6d0
Крок №3 - Покажчики арифметичних операцій в C ++
Арифметика вказівника виконується з масивами. Наступні операції можна виконувати над покажчиками. Вони є:
- Приріст (++)
- Зниження (-)
- Додавання покажчика
- Віднімання вказівника
Коли ми додаємо 1 до вказівника, він визначає додавання розміру вказівника на.
Наведена нижче програма вказує арифметику вказівника, яка працює, поки не потрапляє в кінці масиву.
#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)
Вихід:
$ g ++ -о основний * .cpp
$ основний
2
4
6
8
10
12
14
16
18
20
0
0
4196480
0
-1743362854
32686
1
0
153860328
32766
Крок №4 - Вказівник на покажчик
float ** fpp;
Він позначає два рівні покажчиків ( Кілька непрямих ). Це змінна, яка вказує на інший покажчик, що вказує на об'єкт, вказаний у пам'яті. Наприклад, fpp - плаваючий покажчик, який в даний час вказує на адресу пам'яті 2001 року, розмір float становить 8 байт, то
fpp ++;
вказує fpp, що вказує на адресу 2009. Так само, коли змінна зменшена на 1, вона вказуватиме на попереднє розташування її базового типу за адресою 1993 року.
Крок №5 - Вказівник на функції
Коли покажчики передаються функції в якості аргументів, елементи даних, пов'язані зі змінною цих покажчиків, змінюються в межах функції і потім повертаються в програму виклику, зміни зберігаються в програмі виклику. Коли вказівник передається як параметр, відповідні елементи даних змінюються глобально в межах викликаної функції. Вказівник передається посиланням. Функції можна виконувати вказівниками різними способами:
- функція, яку викликають, передаючи посилання
- Функція, яку викликають, передаючи вказівник
Функція, яку викликається, передаючи посилання
У цьому адреса передається як аргумент замість значень.
Приклад:
#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)
Вихід:
$ g ++ -о основний * .cpp
$ основний
Перед зміною
n = 5
m = 6
Після зміни
n = 6
m = 5
Висновок
Ця стаття мала на меті прикладом оновити знання про використання покажчиків у C ++ та їх основні теми простим способом. Вказівник також відомий як локатор зменшує оператор коду для підвищення продуктивності. Покажчики відіграють важливу роль у реалізації структур даних, таких як пов'язаний список та програмування на системному рівні. Вони є найбільш бажаною мовою у вбудованих системах, оскільки вони є хорошим способом доступу до пам'яті безпосередньо за допомогою покажчиків.
Рекомендовані статті
Це посібник щодо покажчиків на C ++. Тут ми обговорюємо, як створити покажчики в C ++ із поданими прикладами та результатами та навіщо нам це потрібно. Ви також можете переглянути наступний курс аналізу даних, щоб дізнатися більше
- Покажчики в Python
- Типи даних у С
- Масиви в C ++
- Зоряні візерунки в c ++
- Як працюють покажчики в C #?