Какви са указателите в 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 - указател към функции
Когато показателите се предадат на функция като аргументи, елементите от данни, свързани с променливата на тези указатели, се променят в рамките на функцията и след това се връщат в извикващата програма, промените ще бъдат запазени в извикващата програма. Когато показалец се предава като параметър, съответните елементи от данни се променят глобално от наречената функция. Показалецът се предава чрез препратка. Функциите могат да се изпълняват в указатели по различни начини:
- функцията, извикана чрез преминаване на препратката
- Функцията, извикана чрез преминаване на указател
Функцията, извикана чрез преминаване на препратката
При това адресът се предава като аргумент вместо стойности.
Пример:
#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 ++ с дадените примери и изход и защо имаме нужда от това. Можете също така да разгледате следния курс за анализ на данни, за да научите повече
- Указатели в Python
- Типове данни в С
- Масиви в C ++
- Звездни модели в c ++
- Как работят указателите в C #?