Каковы указатели в 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

Здесь переменная указателя может указывать на любой тип данных, и этот тип используется при передаче указателей на функции, которые работают независимо от того типа данных, на который указывает.

Синтаксис: 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, размер с плавающей запятой равен 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
$ основной
До изменения

п = 5

м = 6

После изменения

n = 6

м = 5

Вывод

Эта статья предназначена для того, чтобы освежить знания о том, как использовать указатели в C ++ и их основные темы простым способом на примере. Указатель также известен как локатор, сокращающий оператор кода для повышения производительности. Указатели играют жизненно важную роль в реализации структур данных, таких как связанный список и программирование на системном уровне. Они являются наиболее предпочтительным языком во встроенных системах, поскольку они являются хорошим способом доступа к памяти напрямую с помощью указателей.

Рекомендуемые статьи

Это руководство по указателям в C ++. Здесь мы обсуждаем, как создавать указатели в C ++ с приведенными примерами и выводом, и зачем нам это нужно. Вы также можете посмотреть на следующий курс анализа данных, чтобы узнать больше

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