Які покажчики в 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 - Вказівник на функції

Коли покажчики передаються функції в якості аргументів, елементи даних, пов'язані зі змінною цих покажчиків, змінюються в межах функції і потім повертаються в програму виклику, зміни зберігаються в програмі виклику. Коли вказівник передається як параметр, відповідні елементи даних змінюються глобально в межах викликаної функції. Вказівник передається посиланням. Функції можна виконувати вказівниками різними способами:

  1. функція, яку викликають, передаючи посилання
  2. Функція, яку викликають, передаючи вказівник

Функція, яку викликається, передаючи посилання

У цьому адреса передається як аргумент замість значень.

Приклад:

#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 ++ із поданими прикладами та результатами та навіщо нам це потрібно. Ви також можете переглянути наступний курс аналізу даних, щоб дізнатися більше

  1. Покажчики в Python
  2. Типи даних у С
  3. Масиви в C ++
  4. Зоряні візерунки в c ++
  5. Як працюють покажчики в C #?