Arytmetyka wskaźników w C++

Arytmetyka Wskaznikow W C



Ten artykuł dotyczy arytmetyki wskaźników w C++. Wskaźniki to zmienne przechowujące adres pamięci danych. Arytmetyka wskaźników to potężna cecha charakterystyczna w świecie języka programowania C++, która pozwala nam radzić sobie z różnymi operacjami arytmetycznymi, podczas których dodawanie, mnożenie, dzielenie, zwiększanie, zmniejszanie i odejmowanie wymagają wskaźnika do opracowania nowego adresu pamięci w naszych buforach pamięci . Arytmetyka wskaźników z łatwością tworzy dynamiczną alokację pamięci. W tym artykule o C++ dowiemy się, jak na różne sposoby manipulować adresem pamięci za pomocą wskaźników oraz podamy odpowiednie wskazówki i przykłady.

Scenariusz 1: Wskaźnik wykonuje operacje zwiększania i zmniejszania

Tutaj dowiemy się o manipulacji wskaźnikami w celu utworzenia różnych adresów pamięci, które mają różne cele. Wskaźniki inkrementujące i malejące są także arytmetyką wskaźników dźwigni, która zwiększa lub zmniejsza adres o współczynnik jeden pomnożony przez rozmiar typu danych, na który wskazują. Fragment kodu związany z tym scenariuszem znajduje się w załączniku:







#include
używając przestrzeni nazw std;
stała int Arr_Max = 5 ;
int główny ( ) {
int gdzie [ Arr_Max ] = { 20 , 150 , 270 } ;
wew * pt; // ogłosić wskaźnik
ptr = zmienna;
Do ( int ja = 0 ; I < Arr_Max; ja++ ) {
std::cout << „Adres pamięci elementu to: [” << I << '] = ' ;
std::cout << pt << koniec;
cout << „Wartość względem adresu to [” << I << '] = ' ;
cout << * pt << koniec;
std::cout << „wskaźnik został pomyślnie zwiększony” << koniec;
ptr++;
}
std::cout << „Adres wskaźnika przed zmniejszeniem” << pt << koniec;
ptr--;
std::cout << „Adres wskaźnika po zmniejszeniu” << pt << koniec;
powrót 0 ;
}


Tutaj już na początku definiujemy wymaganą bibliotekę w kodzie: „ ”. Definiujemy alokację pamięci, aby zarezerwować miejsce w pamięci, czyli „Arr_Max = 5”. W funkcji main inicjujemy tablicę i przekazujemy jej rozmiar pamięci. Następnie potrzebna jest również deklaracja wskaźnika „ptr”, aby wskazać adres pamięci w pamięci.



Przekazujemy tablicę do wskaźnika, aby uzyskać dostęp do adresu. Jak wszyscy wiemy, tablice zawsze zawierają wiele elementów w różnych lokalizacjach. Potrzebowaliśmy więc pętli ze wskaźnikiem „pomocy”, aby uzyskać dostęp do każdego elementu tablicy. Za każdym razem, gdy pętla jest wykonywana, otrzymujemy adres pamięci i wartości względem tego adresu za pomocą arytmetycznego operatora inkrementacji wskaźnika „ptr++”, który przesuwa adres pamięci na następny adres pamięci. Cykl wykonania pętli zależy od rozmiaru tablicy. Poza pętlą chcemy przywrócić wskaźnik do poprzedniego adresu pamięci, używając po prostu wskaźnika zmniejszania „ptr--”.



Wykonaj ten kod, klikając opcję Wykonaj> Kompiluj i uruchom, a otrzymasz następujące dane wyjściowe:






Mamy nadzieję, że wynik ten jest łatwy do zrozumienia. Adres i wartość pamięci zostaną zmienione. Przesunięcie wskaźnika z jednego miejsca jest możliwe tylko z arytmetyki wskaźnika przyrostu w C++.

Scenariusz 2: odejmowanie dwóch wskaźników w C++

W tym scenariuszu dowiemy się, jak odjąć dwa lub więcej wskaźników w C++. Wszystkie operacje arytmetyczne, podczas których następuje odejmowanie, są istotnymi procesami, ponieważ możemy odjąć dwa wskaźniki jednocześnie tylko wtedy i tylko wtedy, gdy mają one ten sam typ danych.



Inne operacje, takie jak dodawanie, mnożenie i dzielenie, nie są możliwe na wskaźniku, ponieważ nie mają one sensu w adresowaniu pamięci. Fragment kodu jest załączony w następujący sposób:

#include
int główny ( ) {
Przyzywa [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
wew * ptrr1 = & Do tego [ 3 ] ; // Wskaźnik do trzeciego elementu ( 42 )
wew * ptrr2 = & Do tego [ 6 ] ; // Wskaźnik do szóstego elementu ( 89 )
ptrdiff_t ptodjąć = ptrr2 - ptrr1;

std::cout << „Różnica między tymi adresami wynosi: „ << ptodjąć << ' elementy' << std::endl;
powrót 0 ;
}


Operacja odejmowania polega na znalezieniu różnicy między adresami pamięci w C++. W funkcji main bierzemy tablicę zawierającą różne wartości w różnych indeksach. W tablicy każdy indeks ma inną lokalizację w pamięci. Różnicę między dwoma wskaźnikami możemy znaleźć jedynie za pomocą arytmetyki wskaźników. Tutaj używamy specjalnego typu wskaźnika „ptrdiff_t”, którego należy użyć, aby znaleźć różnice między dwoma lub większą liczbą wskaźników w C++.

Dane wyjściowe tego kodu są załączone w następujący sposób:


Różnica między tymi adresami wynika z imadła elementu, które wynosi 3.

Scenariusz 3: Porównaj dwa lub więcej wskaźników w C++

W tym scenariuszu dowiemy się, jak porównywać różne wskaźniki w C++ przy użyciu różnych operatorów relacyjnych, takich jak „==”, „<=”, „>=”, „<”, „>”. Wskaźniki możemy porównywać tylko wtedy, gdy wskazują adresy elementów tej samej tablicy. Pamiętaj, że porównywanie dwóch wskaźników różnych typów może spowodować niezdefiniowane zachowanie. Fragment kodu związany z porównywaniem wskaźników jest wspomniany poniżej:

#include
używając przestrzeni nazw std;
int główny ( )
{
int tablica1 [ 10 ] = { 4 , 7 , 9 , jedenaście , 14 , 16 , 18 , 20 , 22 , 25 } ;
wew * ptr1 = & tablica1 [ 3 ] ;
wew * ptr2 = & tablica1 [ 6 ] ;
wew * pt3 = & tablica1 [ 8 ] ;
wew * pt4 = & tablica1 [ 9 ] ;
Jeśli ( ptr1 ==ptr2 )
{
std::cout << „wskaźniki są równe” << koniec;
}
w przeciwnym razie Jeśli ( pt3 < =ptr4 )
{
std::cout << „ptr3 jest mniejszy lub równy ptr4” << koniec ;;
}
w przeciwnym razie
{
std::cout << „wskaźniki nie są porównywane na żadnym etapie” << koniec;
}
powrót 0 ;
}


Tutaj bierzemy tablicę z 10 elementami. Deklarujemy cztery wskaźniki wskazujące na inny indeks tablicy. Następnie porównujemy te cztery wskaźniki w różnych warunkach, jak widać w podanym kodzie. W warunku „if” sprawdź, czy wskaźnik „ptr1” jest równy wskaźnikowi „ptr2”, a następnie wypisz „wskaźniki są równe”. Kiedy mamy wiele warunków, używamy warunku „else if”, aby sprawdzić, czy wskaźnik „ptr3” jest mniejszy niż równy wskaźnikowi „ptr4”. Po tym wszystkim kliknij Wykonaj > Skompiluj i uruchom opcja.

Dane wyjściowe tego kodu są załączone w następujący sposób:


Wyświetla prawidłowy warunek na ekranie konsoli i kończy kompilację. Wskaźnik „ptr3” zawiera wartość mniejszą lub równą wartości wskazującej wskaźnika „ptr4”.

Scenariusz 4: Wyświetlanie liczby nieparzystej za pomocą arytmetyki wskaźników

Tutaj zobaczymy, jak możemy dynamicznie przydzielać pamięć dla tablicy liczb całkowitych. Fragment kodu związany z tym przypadkiem znajduje się poniżej:

#include
int główny ( ) {
liczby całkowite [ ] = { 1 , 12 , 33 , 24 , piętnaście , 776 , 71 , 18 , 29 , pięćdziesiąt } ;
wew * ptrr = liczby;
std::cout << „Liczby nieparzyste w tablicach: „ ;
Do ( int ja = 0 ; I < 10 ; ++ja ) {
Jeśli ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
ptrr++;
}
std::cout << std::endl;
powrót 0 ;
}


W funkcji main bierzemy tablicę zawierającą 10 elementów. Potrzebujemy wskaźnika wskazującego wszystkie elementy tablicy, aby sprawdzić liczbę nieparzystą w tablicy. W pętli „for” sprawdź liczbę nieparzystą, dzieląc bieżący element tablicy. Licznik wskaźnika jest zwiększany po sprawdzeniu jednego elementu tablicy.

Po wykonaniu kodu dane wyjściowe zostaną wyświetlone na ekranie konsoli w następujący sposób:


W ten sposób możemy wyświetlić liczby nieparzyste za pomocą arytmetyki wskaźników na ekranie konsoli.

Wniosek

Dochodzimy do wniosku, że arytmetyka wskaźników jest najskuteczniejszym narzędziem wykonującym różne operacje w C++. Upewnij się, że wskaźnik zwiększa lub zmniejsza wartość tablicy o tym samym typie danych. Możemy porównywać wartości tablicy według jej adresów pamięci za pomocą arytmetyki wskaźników w języku programowania C++. Możemy łatwo przeglądać tablicę i zarządzać pamięcią za pomocą arytmetyki wskaźników.