Wskaźnik C ++ arytmetyczna
Wskaźnik jest adresem reprezentacji liczbowej. W związku z tym, można wykonywać operacje arytmetyczne na wskaźniki. Wskaźnik może być cztery operacja arytmetyczna: +, -, +, -.
Załóżmyptr jest wskaźnikiem do adresu wskaźnika całkowita 1000, jest 32-bitową liczbą całkowitą, niech arytmetyczna wskaźnika, aby wykonać następujące czynności:
ptr++
Po wykonaniu powyższej operacjiptr punkty do pozycji 1004, ponieważ PTR każdy dodatkowy czas będzie to wskazywać na następnej pozycji liczby całkowitej, że aktualna sytuacja wróciła cztery bajty.W przypadku tej operacji nie będzie miało wpływu na wartość rzeczywistą lokalizację pamięci, przesuń kursor do następnego miejsca w pamięci. Jeśliptr punkty do adresu 1000 znaków, powyższa operacja spowoduje wskaźnik do pozycji 1001, ponieważ następnej pozycji znaku w 1001.
Zwiększanie wskaźnika
Chcemy użyć wskaźnika zamiast tablicy w programie, ponieważ zmienna wskaźnik jest zwiększany, a tablica nie może wzrosnąć, ponieważ tablica jest stałym wskaźnikiem. Poniższy program zwiększa zmienny wskaźnik do sekwencyjnego dostępu do każdego elementu w tablicy:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中的数组地址 ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr++; } return 0; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Address of var[0] = 0xbfa088b0 Value of var[0] = 10 Address of var[1] = 0xbfa088b4 Value of var[1] = 100 Address of var[2] = 0xbfa088b8 Value of var[2] = 200
Zmniejszamy wskaźnik
Podobnie, wskaźnik jest zmniejszona odjęcie liczby bajtów, które ma wartość typu danych w następujący sposób:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中最后一个元素的地址 ptr = &var[MAX-1]; for (int i = MAX; i > 0; i--) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr--; } return 0; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Address of var[3] = 0xbfdb70f8 Value of var[3] = 200 Address of var[2] = 0xbfdb70f4 Value of var[2] = 100 Address of var[1] = 0xbfdb70f0 Value of var[1] = 10
Porównaj wskaźnik
Wskaźnik może być zastosowany do porównania związek między operatorami, takich jak == <i>. Jeśli punkty P1 i P2 do dwóch powiązanych zmiennych, takich jak z szerokim wachlarzem różnych elementów, może być wielkość P1 i P2 w porównaniu.
Następująca procedura modyfikuje powyższym przykładzie, tak długo jak adres ostatniego elementu o zmiennej wskaźnika jest adres tablicy jest mniejsza niż lub równa & var [max - 1], umieścić zmienną wskaźnika zwiększa się:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中第一个元素的地址 ptr = var; int i = 0; while ( ptr <= &var[MAX - 1] ) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 指向上一个位置 ptr++; i++; } return 0; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Address of var[0] = 0xbfce42d0 Value of var[0] = 10 Address of var[1] = 0xbfce42d4 Value of var[1] = 100 Address of var[2] = 0xbfce42d8 Value of var[2] = 200