Operator pobrania adresu (&)
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 3 z 63.
Skoro potrafisz już deklarować wskaźniki, musisz nauczyć się, jak faktycznie zapisywać w nich adres pamięci. Operator pobrania adresu (&) pozwala uzyskać adres pamięci dowolnej zmiennej.
Gdy umieścisz operator & przed nazwą zmiennej, zwróci on adres pamięci, pod którym ta zmienna jest przechowywana. Pomyśl o tym jak o pytaniu: „Gdzie ta zmienna znajduje się w pamięci?”
int age = 25;
int *ptr;
ptr = &age; // Zapisz adres 'age' w 'ptr'W tym przykładzie &age zwraca nam adres pamięci zmiennej age. Następnie przypisujemy ten adres do naszego wskaźnika ptr. Teraz ptr „wskazuje na” zmienną age.
Operator pobrania adresu jest niezbędny, ponieważ stanowi pomost między zwykłymi zmiennymi a wskaźnikami. Bez niego nie można wskazać wskaźnikowi, na którą zmienną ma wskazywać. Pamiętaj, że typy danych muszą być zgodne — możesz przypisać adres liczby całkowitej tylko do wskaźnika zadeklarowanego dla liczb całkowitych.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje użycie operatora pobrania adresu do łączenia zmiennych ze wskaźnikami. Twój program powinien:
- Zadeklarować zmienną całkowitą o nazwie
numberi zainicjalizować ją wartością 42 - Zadeklarować zmienną znakową o nazwie
letteri zainicjalizować ją wartością 'X' - Zadeklarować wskaźnik do liczby całkowitej o nazwie
num_ptr - Zadeklarować wskaźnik do znaku o nazwie
char_ptr - Użyć operatora pobrania adresu, aby przypisać adres
numberdonum_ptr - Użyć operatora pobrania adresu, aby przypisać adres
letterdochar_ptr - Wyświetlić adresy przechowywane we wskaźnikach za pomocą
printfi specyfikatora formatu%p
Wynik powinien wyświetlać adresy wskaźników w następującym formacie:
Address of number: [address]
Address of letter: [address]Rzeczywiste adresy pamięci będą się różnić w kolejnych uruchomieniach programu, ale format i etykiety muszą dokładnie odpowiadać powyższemu przykładowi. [address] to symbol zastępczy wyświetlanego adresu: nie wyświetlaj nawiasów kwadratowych.
Spróbuj swoich sił
#include <stdio.h>
int main() {
// TODO: Napisz tutaj swój kod
// 1. Zadeklaruj i zainicjalizuj zmienne
// 2. Zadeklaruj wskaźniki
// 3. Użyj operatora pobrania adresu, aby przypisać adresy
// 4. Wyświetl adresy w pokazanym formacie
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online