Wskaźniki. Informatyka

Podobne dokumenty
Lab 9 Podstawy Programowania

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

Języki i metodyka programowania. Wskaźniki i tablice.

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

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

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

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 skrót z wykładów:

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wskaźniki w C. Anna Gogolińska

Podstawy programowania w języku C++

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

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Podstawy programowania komputerów

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Uzupełnienie dot. przekazywania argumentów

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

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

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Język C zajęcia nr 11. Funkcje

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Programowanie w języku C++

Stałe, tablice dynamiczne i wielowymiarowe

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

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

Podstawy programowania w języku C++

Wykład 1: Wskaźniki i zmienne dynamiczne

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

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

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

Wstęp do Programowania, laboratorium 02

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

Część 4 życie programu

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Wprowadzenie do programowania w języku C

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

Tablice, funkcje - wprowadzenie

Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

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

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Wskaźniki. Programowanie Proceduralne 1

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

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

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

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

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

Bardzo szybkie podsumowanie: wykład 3

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf("\n podaj wartosc liczby a\n"); scanf("%d",&a); pa=&a;

Argumenty wywołania programu, operacje na plikach

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wykład 8: klasy cz. 4

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

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

Alokacja pamięci dla tablicy dwuwymiarowej

1 Podstawy c++ w pigułce.

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Tablice, funkcje, wskaźniki - wprowadzenie

Zmienne, stałe i operatory

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.

Języki i metodyka programowania. Wprowadzenie do języka C

Struktury czyli rekordy w C/C++

Podstawy programowania w języku C++

Wstęp do programowania

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wstęp do programowania

Język ANSI C tablice wielowymiarowe

Język C++ zajęcia nr 2

Wskaźniki. Pamięć dynamiczna

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

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

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

MATERIAŁY DO ZAJĘĆ II

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

Programowanie komputerowe. Zajęcia 4

Języki programowania obiektowego Nieobiektowe elementy języka C++

Podstawy programowania w języku C++

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

Algorytmy i język C++

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

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

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Słownik programisty: Struktury jako typy abstrakcyjne

Wstęp do programowania, część II

Programowanie obiektowe W3

Transkrypt:

Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą zmieścić adres początkowy pewnego obiektu. Jeżeli str jest obiektem typu char, a pstr ma być wskaźnikiem, który wskazuje na ten obiekt, to taki wskaźnik można zdefiniować następujący sposób: char str; char *pstr; pstr=&str; Deklaracja typ *wskaznik; typ tablica[rozmiar]; Zarówno wskaznik jak i tablica są zmiennymi typu wskaźnikowego (przy czym tablica jest zmienną, której nie można przypisać innej wartości). Przypisanie adresu do wskaźnika wskaznik = inny_wskaznik; wskaznik = &zmienna; Odczyt wartości z adresu / zapis pod adresem zmienna = *wskaznik; *wskaznik = wartosc; // stała, zmienna, funkcja lub wyrażenie Działania na wskaźnikach wskaznik++; wskaznik--; wskaznik + indeks; wskaznik[indeks];

Uwagi, komentarze Operator wyłuskania (*zmienna) ma wysoki priorytet, szczególnie z operatorami ++ i -- należy być ostrożnym (czy to dotyczą wskaźnika czy też wartości w pamięci pod adresem wewnątrz wskaźnika) Powyższe działania można łączyć: wskaznik = inny_wskaznik + indeks; zmienna = *(wskaznik + indeks); zmienna = *wskaznik++; Dynamiczna alokacja pamięci Czasami z góry nie wiadomo ilu elementowa tablica będzie potrzebna. Deklaruje się wówczas zmienną wskaźnikową pożądanego typu i wywołuje funkcje alokacji pamięci (o żądanym rozmiarze). Funkcja ta zwraca adres pamięci. Należy to wpisać do wskaźnika na którym można później już normalnie działać (np. wskaznik[indeks] = wartosc;). Kiedy zaalokowana pamięć jest niepotrzebna, należy ją zwolnić. Uwaga - niezwolnione obszary pamięci, czytanie i zapisywanie pod niedozwolone adresy to częste i poważne błędy programistyczne. Funkcje alokujące i zwalniające pamięć malloc() i free() w C zostały zastąpione w C++ przez operatory new oraz delete. wsk1 = new typ; wsk2 = new typ[ ilosc_elementow]; delete wsk; delete[] wsk2; Obszar pamięci jaki zostanie przydzielony może zawierać dowolne wartości ("śmieci", poprzednie dane). Nie wolno robić żadnych założeń co do zawartości pamięci.

Przykład #include <stdio.h> #include <stdlib> int main(int argc, char *argv[]){ int *wsk; int i, n; printf("podaj rozmiar tablicy"); scanf("%d", &n); wsk = new int[n]; // zaalokuj pamięć for (i = 0; i < n; ++i) wsk[i] = i;//wypełnij tablicę delete [] wsk; //zwolnij pamięć return 0; Wskaźniki typu void W C wskaźniki dowolnego typu mogą być przydzielane do wskaźników typu void i odwrotnie, natomiast w C++ wymagana jest jawna konwersja. void *wsk; char *str = Tekst ; wsk = (char*) str; Referencja W C++ można tworzyć tzw. zmienne referencyjne. Jeśli zadeklarujemy zmienną referencyjną do innej zmiennej, to jakiekolwiek zmiany wartości dowolnej z powiązanych w ten sposób zmiennych będą odnosiły się również do drugiej z nich. int w = 4; int &n = w; //n jest zmienną referencyjną do w n = 12; //w == 12 && n == 12 w = 8; //w == 8 && n == 8

Referencja jest najczęściej wykorzystywana w funkcjach modyfikujących swoje argumenty. (W C konieczne było w tym celu przekazywanie do funkcji wskaźników do zmiennych) void change(int &a, int &b){ int t; t = a; a = b; b = t; int main(){ int *wsk; int a = 3, b = 5; change(a, b); //a == 5 && b == 3 return 0; W C++ operatory new i delete (W C malloc, calloc, realloc, free, sizeof, konwersje wskaźników z void*) char *str, *str1; str = new char; *str = 'a'; str1 = new char ('b'); char *str3; str3 = new char[10]; if (str3) strcpy(str3, "1234567890"); else printf("błąd przydziału pamięci\n"); printf("str = %s\n", str3); printf("str = %c\n", *str); Obiekty utworzone za pomocą new istnieją aż do momentu ich jawnego usunięcia operatorem delete Po utworzeniu zawierają "śmieci" delete str1; //usunięcie tablicy dynamicznej

delete[] str2; Pozostałe informacje W C zmienna typu char to przede wszystkim liczba 8-bitowa. Aby w kodzie wykorzystywać stałe literały znakowe (np. literę A) należy je umieścić pomiędzy apostrofami (np. 'A'). Czymś innym jest 0, 1, 2,... niż '0', '1', '2',... Wypisanie zmiennej typu char na konsolę (innymi słowy, instrukcja dla kompilatora by liczbę 8-bitową potraktował jako czytelny znak) to printf("%c", zmienna);. Uwaga, czytelne znaki nie zajmują całej przestrzeni 0-255, część wartości koduje znaki sterujące (np. tabulator) i inne. W C napisy to zmienne typu char *s, czyli dla programistów - tablice zawierające wartości typu char zakończone pojedynczym bajtem 0. Długość napisu to zatem różnica adresów bajtu 0 i początku napisu.