Арифметика указателей в C++

Arifmetika Ukazatelej V C



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

Сценарий 1: Указатель выполняет операции увеличения и уменьшения.

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







#include
использование пространства имен std;
const int Arr_Max = 5 ;
int главный ( ) {
int  где [ Арр_Макс ] '=' { двадцать , 150 , 270 } ;
интервал * ПТР; // объявить указатель
ПТР = вар;
для ( интервал я = 0 ; я < Арр_Макс; я++ ) {
станд::cout << 'Адрес памяти элемента: [' << я << '=' ;
станд::cout << ПТР << конец;
расчет << 'Значение по адресу [' << я << '=' ;
расчет << * ПТР << конец;
станд::cout << «указатель успешно увеличен» << конец;
птр++;
}
станд::cout << «Адрес указателя перед уменьшением» << ПТР << конец;
птр--;
станд::cout << «Адрес указателя после уменьшения» << ПТР << конец;
возвращаться 0 ;
}


Здесь мы определяем необходимую библиотеку в самом начале кода: « ». Мы определяем выделение памяти для резервирования места в памяти, которое равно «Arr_Max=5». В основной функции мы инициализируем массив и передаем в него размер памяти. Далее, объявление указателя «ptr» также необходимо для указания адреса памяти в памяти.



Мы передаем массив указателю для доступа к адресу. Как мы все знаем, массивы всегда содержат несколько элементов в разных местах. Итак, нам нужен был цикл с указателем help для доступа к каждому элементу массива. Каждый раз, когда цикл выполняется, мы получаем адрес памяти и значения по этому адресу с помощью оператора приращения арифметики указателей «ptr++», который сдвигает адрес памяти на следующий адрес памяти. Цикл выполнения цикла зависит от размера массива. Вне цикла мы хотим вернуть указатель на предыдущий адрес памяти, просто используя указатель уменьшения «ptr- -».



Выполните этот код, нажав кнопку «Выполнить»> «Компилировать и запустить», и вы получите следующий результат:






Надеюсь, этот вывод легко понять. Адрес и значение памяти изменяются. Смещение указателя из одного места возможно только с помощью арифметики приращения указателя в C++.

Сценарий 2. Вычитание двух указателей в C++

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



Другие операции, такие как сложение, умножение и деление, невозможны в указателе, поскольку они не имеют смысла при адресации памяти. Фрагмент кода прилагается ниже:

#include
int главный ( ) {
Он манит [ ] '=' { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
интервал * птр1 = & К тому, что [ 3 ] ; // Указатель на третий элемент ( 42 )
интервал * птр2 = & К тому, что [ 6 ] ; // Указатель на шестой элемент ( 89 )
ptrdiff_t ptrsubtract = птр2 - птр1;

станд::cout << 'Разница между этими адресами: ' << ptrsubtract << 'элементы' << станд::эндл;
возвращаться 0 ;
}


Операция вычитания находит разницу между адресами памяти в C++. В основной функции мы берем массив, содержащий разные значения по разным индексам. В массиве каждый индекс имеет свою ячейку памяти. Мы можем найти разницу между двумя указателями только с помощью арифметики указателей. Здесь мы используем специальный тип указателя «ptrdiff_t», который необходимо использовать для поиска различий между двумя или более указателями в C++.

Вывод этого кода прилагается следующим образом:


Разница между этими адресами заключается в количестве элементов, равном 3.

Сценарий 3. Сравнение двух или более указателей в C++

В этом сценарии мы научимся сравнивать различные указатели в C++, используя разные операторы отношения, такие как «==», «<=», «>=», «<», «>». Мы можем сравнивать указатели только в том случае, если они указывают на адреса элементов одного и того же массива. Помните, что сравнение двух указателей разных типов может привести к неопределенному поведению. Фрагмент кода, связанный со сравнением указателей, упоминается ниже:

#include
использование пространства имен std;
int главный ( )
{
int arr1 [ 10 ] '=' { 4 , 7 , 9 , одиннадцать , 14 , 16 , 18 , двадцать , 22 , 25 } ;
интервал * ptr1 '=' & обр1 [ 3 ] ;
интервал * ptr2 '=' & обр1 [ 6 ] ;
интервал * ptr3 '=' & обр1 [ 8 ] ;
интервал * ptr4 '=' & обр1 [ 9 ] ;
если ( ptr1 ==ptr2 )
{
станд::cout << «указатели равны» << конец;
}
еще если ( ptr3 < =ptr4 )
{
станд::cout << «ptr3 меньше или равен ptr4» << конец ;;
}
еще
{
станд::cout << «указатели не сравниваются ни на каком этапе» << конец;
}
возвращаться 0 ;
}


Здесь мы берем массив из 10 элементов. Мы объявляем четыре указателя, которые указывают на другой индекс массива. После этого мы сравниваем эти четыре указателя в разных условиях, как показано в данном коде. В условии «if» проверьте, равен ли указатель «ptr1» указателю «ptr2», а затем выведите «указатели равны». Когда у нас есть несколько условий, мы используем условие «else if», чтобы проверить, меньше ли указатель «ptr3» указателя «ptr4». После всего этого нажмите кнопку Выполнить > Компилировать и запустить вариант.

Вывод этого кода прилагается следующим образом:


Он отображает допустимое условие на экране консоли и завершает компиляцию. Указатель «ptr3» содержит значение, которое меньше или равно значению указателя указателя «ptr4».

Сценарий 4. Отображение нечетного числа с помощью арифметики указателей

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

#include
int главный ( ) {
целые числа [ ] '=' { 1 , 12 , 33 , 24 , пятнадцать , 776 , 71 , 18 , 29 , пятьдесят } ;
интервал * птрр = числа;
станд::cout << 'Нечетные числа в массивах: ' ;
для ( интервал я = 0 ; я < 10 ; ++я ) {
если ( * птрр % 2 ! '=' 0 ) {
станд::cout << * птрр << ' ' ;
}
птр++;
}
станд::cout << станд::эндл;
возвращаться 0 ;
}


В основной функции мы берем массив, содержащий 10 элементов. Нам нужен указатель, указывающий на все элементы массива, чтобы проверить нечетное число в массиве. В цикле for проверьте нечетность числа, разделив текущий элемент массива. Счетчик указателя увеличивается после проверки одного элемента массива.

После выполнения кода выходные данные отображаются на экране консоли, как показано ниже:


Таким образом, мы можем отображать нечетные числа с помощью арифметики указателей на экране консоли.

Заключение

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