Techniki Programowania wskaźniki

Podobne dokumenty
Techniki Programowania wskaźniki 2

Techniki Programowania przeładowanie funkcji

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

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

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

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

Wstęp do wskaźników w języku ANSI C

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

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

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Lab 9 Podstawy Programowania

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

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

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

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

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

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:

Podstawy programowania w języku C++

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

Programowanie Obiektowew języku C++ Zadania L4

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

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

Podstawy programowania skrót z wykładów:

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

TEMAT : KLASY POLIMORFIZM

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

DYNAMICZNE PRZYDZIELANIE PAMIECI

Przekazywanie argumentów wskaźniki

Podstawy programowania w języku C++

Programowanie 2. Język C++. Wykład 3.

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Programowanie Obiektowew języku C++ Zadania L4

Programowanie w języku C++

Część 4 życie programu

Szablon klasy std::vector

Wstęp do programowania obiektowego, wykład 7

TEMAT : KLASY DZIEDZICZENIE

Wstęp do Programowania 2

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Programowanie obiektowe w C++ Wykład 12

STL: Lekcja 1&2. Filozofia STL

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

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

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Język C zajęcia nr 11. Funkcje

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

Inicjacja tablicy jednowymiarowej

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

ZASADY PROGRAMOWANIA KOMPUTERÓW

tablica: dane_liczbowe

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

PARADYGMATY PROGRAMOWANIA Wykład 4

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

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

Referencje do zmiennych i obiektów

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie komputerowe. Zajęcia 4

Tablice, funkcje, wskaźniki - wprowadzenie

Wstęp do programowania

Wstęp do programowania

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

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Operacje wejścia/wyjścia odsłona pierwsza

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Wskaźniki. Informatyka

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

Wskaźniki. Programowanie Proceduralne 1

Programowanie - wykład 4

C-struktury wykład. Dorota Pylak

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Programowanie proceduralne w języku C++ Funkcje

Obsługa wyjątków. Język C++ WW12

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Wprowadzenie do OpenMP

Algorytmy i język C++

Wykład 1: Wskaźniki i zmienne dynamiczne

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Język C++ zajęcia nr 2

Język C++ Różnice między C a C++

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

PARADYGMATY PROGRAMOWANIA Wykład 3

Paradygmaty programowania

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Transkrypt:

Techniki Programowania wskaźniki Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem

Wskaźniki Dla typu T zapis T* oznacza wskaźnik do T, czyli zmienna typu T* może przechowywać adres (w pamięci) obiektu typu T. int a = 1; int *p = &a; cout << *p;

Wskaźniki Podstawową operacją na wskaźniku jest wyłuskanie, czyli odwołanie się do obiektu pokazywanego przez ten wskaźnik. Operacja ta nazywa się adresowaniem pośrednim (indirection). Operatorem adresowania pośredniego jest przedrostkowy jednoargumentowy operator (wyłuskania) *. Operatorem dualnym do operatora wyłuskania jest przedrostkowy jednoargumentowy operator pobrania adresu & (zwraca adres obiektu).

int* p = &a; int* p; int a; p = &a

Wskaźniki Z definicji wskaźnika wynika, że wskaźnik pokazuje na obiekt. Referencja nie jest obiektem nie można definiować wskaźnika do referencji. Typ wskaźnika precyzyjnie określa, na jakie obiekty można takim wskaźnikiem pokazywać. Generalnie, wskaźnikiem typu A* nie można pokazywać na obiekty typu B.

Wskaźniki Definicja wskaźnika tworzy jedynie obiekt wskaźnikowy wskaźnik nie pokazuje na konkretny obiekt: int* p; // p pokazuje na "nie-wiadomo-co" Aby bezpiecznie używać wskaźnika, należy go ustawić: p = &n; // teraz p pokazuje na n Najbezpieczniej ustawić wskaźnik od razu (w definicji): int* p = 0; // p pokazuje na adres 0x00000000 Żaden obiekt nie może być umieszczony w pamięci pod adresem 0. Zero pełni rolę literału wskaźnikowego, oznaczającego wskaźnik, który nie pokazuje na żaden obiekt.

Tablice a wskaźniki long *c[10]; - 10 elementowa tablica wskaźników do elementów typu long Tablica (lub jej początek) jest obiektem w pamięci, ma więc zatem swój własny adres. Nazwa tablicy tab typu T[] jest adres jej pierwszego elementu &tab[0] Tablica tab typu T[] może być niejawnie skonwertowana do typu T*; Rezultatem jest wskaźnik do pierwszego elementu tablicy tab. Jeżeli mamy wskaźnik T* p, to operatory: * oraz [] działają identycznie: *p == p[0] *(p + i) == p[i]

Tablice a wskaźniki Tablica obiektów typu int: int a[10]; // a typu: int [10] int* pn = &a[3]; // pn typu: int* *pn = 7; // a[3] = 7 int* pa = a; // pa typu: int* // nastąpiła konwersja: int[] int* pa[3] = 7; // a[3] = 7 Tablica obiektów typu int* (wskaźników): int n; // n typu: int int* ap[10]; // ap typu: int *[10] ap[3] = &n; // ustawiamy adres n *ap[3] = 7; // n = 7

Tablice a wskaźniki Nazwa tablicy jest jednocześnie stałym wskaźnikiem (adresem) do jej pierwszego elementu Możliwa jest niejawna konwersja z typu T[] na T* int t[] = {1, 4, -2}; // zmieniamy trzeci element tablicy *(t+2) = 5; // wynik: {1, 4, 5} int * p; // równoważnie można zapisać: p = &t[0]; // *p wynosi 1 p = t; // *p wynosi 1 // p wskazuje na ostatni element p = &t[2]; // *p wynosi 5

Tablice a wskaźniki Jeżeli wskaźnik pokazuje na element tablicy można użyć go zgodnie z notacją typową dla tablic: double tab[5] = {-2,-1,0,1,2}; double * ptr; ptr = &tab[0]; // lub: ptr = tab; for (int i = 0; i < 5; i++) cout << ptr[i] << ' ' << tab[i] << endl; -2,-1,0,1,2-2,-1,0,1,2

Tablice a wskaźniki Wskaźnik taki można przesuwać po elementach tablicy: double tab[5] = {-2,-1,0,1,2}; ptr++; for (int i = 0; i < 4; i++){ cout << *ptr << ' ' << tab[i] << endl; ptr++; } -1,0,1,2-2,-1,0,1

Tablice a wskaźniki Wskaźnik taki można przesuwać po elementach tablicy: ptr++; for (int i = 0; i < 4; i++){ cout << *ptr << ' ' << tab[i] << endl; ptr++; tab++; } Blad

Arytmetyka wskaźników Rezultat zastosowania do wskaźników operatorów arytmetycznych +, -, +=, -=, ++ i -- zależy od typu wskazywanego obiektu. Stosując operator arytmetyczny do wskaźnika p typu T* zakładamy, że p wskazuje na element w tablicy obiektów typu T. Wtedy: p + 1 oznacza adres następnego elementu w tablicy, p - 1 oznacza adres poprzedniego elementu w tablicy, p + i oznacza adres i-tego następnego elementu, p - i oznacza adres i-tego poprzedniego elementu

Arytmetyka wskaźników #include<iostream> using namespace std; int main() { int tab[]={0,1,2,3,8}; int *wsk1,*wsk2; wsk1=&tab[1]; wsk2=&tab[4]; cout << wsk2-wsk1 << endl; system("pause"); return 0; } 3

Arytmetyka wskaźników int main() { int tab[5]={1,2,3,4,5}; int *wsk; wsk=tab; for (int i=0;i<5;i++) { cout<<*wsk<<"\t"<<wsk<<endl; wsk++; } return 0; }

Porównywanie wskaźników Dwa wskaźniki tego samego typu są równe (różne) jeżeli pokazują (nie pokazują) na ten sam obiekt: int *wsk1,*wsk2; if (wsk1==wsk2){} if (wsk1!=wsk2){} //ten sam obiekt //różne obiekty Porównywanie wskaźników operatorami <, >, <= i >= jest zdefiniowane tylko wtedy, gdy oba wskaźniki wskazują na elementy tej samej tablicy. Wtedy, jeżeli w1 < w2, to oznacza to, że obiekt wskazywany przez w1 znajduje się w pamięci wcześniej niż drugi (w1 jest bliżej początku tablicy niż w2).

Wskaźniki i const zwykły wskaźnik: stały wskaźnik int *wsk int * const wsk wskaźnik do obiektu stałego const int * wsk stały wskaźnik do stałego obiektu const int * const wsk