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