Какви са указателите в 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 в паметта, за да държи цяло число.

пи = & А; // Задава адреса на целочислената променлива p на променливата на указателя. Например, ако адресът на p е 4581, тогава стойността в * pi ще бъде равна на 4581.

Стъпка # 2 - Невалидна указател

Тук променливата на показалеца е позволена да сочи към всеки тип данни и този тип се използва при преминаване на указатели, за да функционират независимо от типа на данните, към който е посочено.

Синтаксис: void * променлива променлива;

Пример:

#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 ++ -o main * .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 ++ -o main * .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 ++ -o main * .cpp
$ основна
Преди промяна

n = 5

m = 6

След промяна

n = 6

m = 5

заключение

Тази статия има за цел да опресни знанията за това как да използвате указатели в C ++ и техните основни теми по прост начин с пример. Показалецът е известен също като локатор намалява оператора на код за по-висока производителност. Показалците играят жизненоважна роля при прилагането на структури от данни като свързан списък и програмиране на системно ниво. Те са най-предпочитаният език в вградените системи, тъй като са добър начин за достъп до паметта директно с помощта на указатели.

Препоръчителни статии

Това е ръководство за указатели в C ++. Тук обсъждаме как да създаваме указатели в C ++ с дадените примери и изход и защо имаме нужда от това. Можете също така да разгледате следния курс за анализ на данни, за да научите повече

  1. Указатели в Python
  2. Типове данни в С
  3. Масиви в C ++
  4. Звездни модели в c ++
  5. Как работят указателите в C #?