Looking for pointers Answers? Try Ask4KnowledgeBase
Looking for pointers Keywords? Try Ask4Keywords

pointersPierwsze kroki ze wskaźnikami


Uwagi

Ta sekcja zawiera przegląd wskaźników i dlaczego deweloper może chcieć z nich skorzystać.

Powinien również wymieniać wszelkie duże tematy w obrębie wskaźników i zawierać linki do powiązanych tematów. Ponieważ dokumentacja wskaźników jest nowa, konieczne może być utworzenie początkowych wersji tych pokrewnych tematów.

Pierwsze kroki ze wskaźnikami

Wskaźniki są zmiennymi, które przechowują adres innej zmiennej. Jako funkcja języka są dostępne w kilku językach programowania, takich jak między innymi:

  • Udać się
  • C / C ++
  • Ada
  • Pascal
  • C # (dostępny pod pewnymi ograniczeniami)
  • COBOL
  • FORTRAN

Aby rozpocząć korzystanie ze wskaźników C / C ++, wykonaj następujące kroki

  1. Zainstaluj kompilator jak Minimalistic GNU dla Windows, http://www.mingw.org/wiki/Getting_Started

  2. Przejdź do folderu instalacyjnego binarnego g ++ za pomocą wiersza poleceń, na przykład:

    C:\MinGW\bin>
     

3. Utwórz plik tekstowy i napisz ten program C ++

#include <iostream>

int main () {

   int  pointed=0;
   int* ptr = & pointed;

   std::cout<<"Address of pointed variable is: "<<ptr<<std::endl;

   return 0;
}
 
  1. Zapisz jako pointer.cpp 5. W wierszu polecenia uruchom polecenie

g ++ -o pointer.exe -c pointer.cpp

  1. W katalogu roboczym otrzymasz plik wykonywalny jako pointer.exe, ten plik exe po uruchomieniu da jakieś dane wyjściowe, takie jak

Adres wskazanej zmiennej to: 0x7e892dac0a0c

Jeśli otrzymasz powyższy wynik, napisałeś swój pierwszy program wskaźnikowy

Co to jest wskaźnik?

Jest to w zasadzie adres zmiennej w pamięci. Pozwala nam to na pośredni dostęp do zmiennej. Korzystając ze wskaźników, możemy mówić o adresie zmiennej (a także o jej wartości poprzez dereferencję wskaźnika). Są przydatne, gdy chcemy zająć się adresem lokalizacji pamięci, a nie jej wartością.

Rozważ następującą prostą funkcję wymiany w C:

void Swap(int firstVal, int secondVal)
{
 int tempVal = firstVal;
 firstVal = secondVal;
 secondVal = tempVal;
}
 

teraz w głównej, jeśli mamy następujący kod:

.
.
int a = 9,b = 100;
swap(a,b);
//print a and b
.
.
 

Wartości aib pozostałyby niezmienione, co byłoby jasne, drukując ich wartości w funkcji głównej. Aby poprawnie zaimplementować funkcję wymiany, zamiast przekazywać wartości zmiennych a i b , podajemy adres zmiennych a i b jako:

swap(&a,&b);
 

Operator & zwraca adres zmiennej. Używa się go w ten sposób:

int *address_of_a = &a;
 

int *address_of_a , że zmienna address_of_a wskazuje na (przechowuje adres) zmienną całkowitą.

Teraz naszą prawidłową funkcją zamiany byłoby:

void Swap(int *firstaddress, int *secondaddress)
{
 int tempVal = *firstaddress;
 *firsaddress = *secondaddress;
 *secondaddress = tempVal;
}
 

Teraz zamienione wartości zostaną odzwierciedlone w głównej funkcji:

int a = 9,b = 100;
swap(&a,&b);
//print
 

Zawsze możesz wyrejestrować wskaźnik za pomocą * , jeśli nie masz oryginalnej zmiennej. Załóżmy, że jeśli w funkcji nie masz oryginalnej zmiennej, ale masz adres w zmiennej wskaźnikowej int *x . Możemy po prostu uzyskać dostęp do wartości adresu pamięci jako value = *x ;

Gdybyśmy nie mieli wskaźników, nigdy nie moglibyśmy emulować przejścia przez referencję w C , ponieważ C jest przekazywane przez wartość . Pamiętaj jednak, że możemy tylko emulować , ponieważ nawet gdy używamy wskaźników, int *firstaddress, int *secondaddress są tylko lokalnymi zmiennymi wskaźnikowymi, które mają adres zmiennych a i b .