W dowolnym momencie można zmienić typ wskaźnika.

Podobne dokumenty
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Techniki Programowania wskaźniki

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Język C++ zajęcia nr 2

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

ć ć ć Ś ć Ż

Ę ć ć Ę Ą Ę

ś ś ś Ź Ę Ć ś ś ś ć ś ś ś ś ś ś ś ś ś ś Ą

ć ż ż Ś ż

ź ś Ś Ę Ż ść ś ś Ż Ż ś Ż Ż

Ę



KURS C/C++ WYKŁAD 6. Wskaźniki

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Lab 9 Podstawy Programowania

Języki i techniki programowania Ćwiczenia 2

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Ł Ż ś ć ż ż ś ś ż ś Ę ś Ę ż ź Ż ść Ż

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

IX. Wskaźniki.(3 godz.)

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Ś ć ż ż ż ż Ą Ę Ę Ę

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Ę ś ś ń ź ź Ę ć Ę Ł ń ś ń ś Ż ń Ę ś ń Ę ś Ę ń ś ń ś ś Ż ś Ę ń ś ś ś Ę Ę ś ś ś Ę ś ść ś ść

Ć ć ń Ć ń ć ć Ć

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Ę

ć Ę ć Ę ź Ę

ź Ź Ź ć ć ć ź ć ć ć ć ć Ź

Wykład 8: klasy cz. 4

ś ś ś ź ć ś ś

Ą ŚĆ Ś Ś Ę ć

Wykład 1: Wskaźniki i zmienne dynamiczne

Ą Ę Ń Ś Ą

ś ś ś ś ś ś ś ś ś ś ć ś Ż Ż ć ś ś Ż ć

Referencje do zmiennych i obiektów

Ł

Ą Ę Ł Ą Ż

ść ś ść Ę ś ś ść ś ź ś Ę

Ę Ź Ż Ż ć ć ć ć ć

Ą Ą ź

ź Ć Ż

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

Ż ź Ł

Ę Ż ż Ł ź ż ż ż ż

Ż Ą Ź ć Ę Ź ć

ć ć ć

ś ść ść ś ść ść ś ś ś ś ść ś ś ś ść ść



ć ć ź ć ć ć Ź ź Ź ź

Ó Ó ą

Ó

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119


Ć


Ź ź Ź ń ń ń ń

ś ć ś Ź ć ś Ż Ż Ś Ź Ć ś Ź

ń Ż Ę Ę ń

ć ć ź ć Ę Ź ć ć ć ć ć

Przekazywanie argumentów wskaźniki

ź ź ć ź ź ź Ó Ó ć Ć ć ć Ą ć ć ź ć ć ć ć Ś

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.


Ł ź ś ń ść ść ś ć ć ś ć ź ź ć ć ń ć ść ć ć ś

Wykład 5: Klasy cz. 3

Ą Ł Ę Ń Ą Ó ŚĆ Ś ć Ó ń ć ŚĆ ć ć

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie współbieżne Wykład 6. Iwona Kochaoska


Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Pętla for. Wynik działania programu:

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

ć

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania w języku C++

ć ć Ą ć Ęć Ó Ą ź ć ć ć ć ź ź Ą ć Ę ć ź ć ć ć ź ć ź ć ć ć Ś Ź ź

ć ć Ę ż Ą ż ż Ź ć Ę Ą ż Ą ć ż ć ć ż ż ć Ę ż ż ć ż ć

ć ć Ń Ę

Ś Ę Ą Ł Ś Ł Ł Ł Ł Ł Ś Ś Ł Ł Ł Ą Ł Ł Ł Ł Ł Ą Ą Ł

Ć ć ć Ś ć

Transkrypt:

c++

Wskaźniki mają jeszcze jedną przydatną cechę. W dowolnym momencie można zmienić typ wskaźnika. Robi się to za pomocą operatora rzutowania.

Najpierw zdefiniujemy sobie wsk_uniwersalny mogący pokazywać na liczby long. Następnie zdefiniujemy sobie trzy zmienne różnych typów. Ustawimy nasz wskaźnik na zmienną typu long. Wszystko jest w porządku. Zarówno zmienna, jak i wskaźnik są tego samego typu. Jak myślisz, co się stanie, gdy podstawimy do wskaźnika zmienną innego typu? Kompilator wywali błąd

Jednakże są sytuacje kiedy zmiana typu wskaźnika jest przydatna. Zmiana, czyli konwersja zachodzi za sprawą operatora rzutowania. Taki operator, to nic innego, jak zwykły nawias stawiany przed konwertowanym typem, a zawierający określenie nowego typu.

(int *)wsk_uniwersalny; spowoduje, że wsk_uniwersalny, który był wskaźnikiem pokazującym na liczby long staje się wskaźnikiem do liczb Pamiętaj tylko, że w nawiasie należy jeszcze podać gwiazdkę. Informuje ona, że chodzi o wskaźnik, a nie o zmienną.

Stałe definiowaliśmy poprzedzając je słówkiem const. Stałe można było inicjalizować tylko podczas ich definicji. Wartość raz nadana nie mogła ulec zmianie. Wskaźnikami również można tak manipulować.

ć ż ś Zdefiniowaliśmy sobie dwie zmienne: x i y. Obie typu float. Następnie definiujemy stały wskaźnik wsk mogący pokazywać na obiekty typu float i od razu go inicjalizujemy (inicjalizacja stałego wskaźniku musi nastąpić podczas jego definiowania) stałego wskaźnika nie można ustawić nawet na ten sam obiekt - linijka: wsk = &x. jedynym miejscem ustawienia wskaźnika jest miejsce jego definicji. Co za tym idzie żadne operacja przesuwania typu wsk++; wsk--; wsk += 3; etc. także nie zadziałają!

Mamy zwykłą zmienną x typu float oraz wskaźnik wsk ustawiony na niej. Sam wskaźnik posiada jednak pewne ograniczenie. Nie może bowiem modyfikować wartości obiektu, na który wskazuje. Sam obiekt oczywiście nie musi być stałą, co widać w przykładzie.

wskaźnikiem nie można poruszać, ani przestawiać, a dodatkowo nie można zmieniać wartości obiektu, na który wskazuje. Dla formalności przykład takiego wskaźnika: float pi = 3.14; const float * const wsk = π

Zmienne przekazujemy do funkcji przez wartość referencję.

Skoro funkcja pobiera jako argument wskaźnik na zmienną, to faktycznie pobiera adres zmiennej. A jeśli pobrany został adres zmiennej, funkcja działa bezpośrednio na zmiennej, nie na jej kopii. Nasza zdefiniowana funkcja działa więc tak samo jak funkcja w postaci: Zalecamy jednak przekazywanie funkcji argumentów będących wskaźnikami, ponieważ mamy wtedy pewność, że taka funkcja będzie działała na oryginalnych zmiennych

Zacznijmy od programu, dzięki któremu zobaczymy, jak ułożone są w pamięci kolejne elementy tablicy: ą ę Zauważ, że w pętli nie wyświetlamy wartości elementów, lecz adresy komórek, w których te wartości będą przechowywane.

Jeśli znamy adres pierwszego elementu tablicy i wiemy, ile bajtów zajmuje zmienna tego samego typu, co elementy tablicy, to łatwo obliczymy adres komórki, pod którym znajdziemy zapisaną wartość dowolnego n-tego elementu tablicy. Jeśli wiec ustawimy wskaźnik na pierwszy element tablicy, to inkrementując go, będziemy się przesuwać do kolejnych jej elementów. Aby znaleźć adres pierwszego elementu tablicy, wystarczy odwołać się do nazwy tablicy.

W języku C+ + nazwa tablicy jest jednocześnie wskaźnikiem do jej pierwszego elementu. Oznacza to, że tab jest tym samym, co &tab [ 0 ]

Wynika stąd, że instrukcje są równoważne. Dlatego gdy przekazywaliśmy wywoływanej funkcji nazwę tablicy, to przekazywaliśmy wskaźnik do jej pierwszego elementu, czyli adres w pamięci, pod którym znajdowała się tablica. Funkcja działała więc na oryginalnej tablicy, a nie na jej kopii.

Zdefiniujemy wskaźnik na zmienną będącą liczbą całkowitą Ustawimy go na pierwszym elemencie tablicy, a następnie będziemy go tylko przesuwać wzdłuż tablicy, bez potrzeby odnajdywania za każdym razem początku tablicy.

ź ź ź ść ę ź ść ź ę ę ź