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

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

Lab 9 Podstawy Programowania

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

Wskaźniki. Informatyka

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

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Wskaźniki. Programowanie Proceduralne 1

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

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

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

Tablice, funkcje, wskaźniki - wprowadzenie

6 Przygotował: mgr inż. Maciej Lasota

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

Wprowadzenie do programowania w języku C

Tablice, funkcje - wprowadzenie

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

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

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

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

Funkcja, argumenty funkcji

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

Stałe, tablice dynamiczne i wielowymiarowe

Podstawy programowania w języku C++

Programowanie w języku C++

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 komputerów

Wykład 1: Wskaźniki i zmienne dynamiczne

Wskaźniki w C. Anna Gogolińska

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

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

Uzupełnienie dot. przekazywania argumentó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

Struktury, unie, formatowanie, wskaźniki

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

Podstawy programowania w języku C++

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

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

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

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

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Język C zajęcia nr 11. Funkcje

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

Struktury czyli rekordy w C/C++

Podstawy programowania w języku C++

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.

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

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

STL: Lekcja 1&2. Filozofia STL

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

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

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:

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

Podstawy programowania w języku C++

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI

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

Stałe i zmienne znakowe. Stała znakowa: znak

Podstawy programowania w języku C++

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

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

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

Podstawy programowania w języku C++

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wykład 3 Składnia języka C# (cz. 2)

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Wskaźniki. Pamięć dynamiczna

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

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

Struktury. Przykład W8_1

Podstawy informatyki. Wykład nr 1 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

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

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Wskaźniki. Przemysław Gawroński D-10, p Wykład 1. (Wykład 1) Wskaźniki / 9

Podstawy programowania 1

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

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

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

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

Programowanie komputerowe. Zajęcia 4

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

ŁAŃCUCHY W JĘZYKU C/C++

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

4) Operacje na tablicy dwuwymiarowej bez wykorzystywania indeksów liczbowych:

Podstawy programowania

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

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

Podstawy programowania w języku C++

Struktury - wprowadzenie

Programowanie Komputerów

Wstęp. do języka C na procesor (kompilator RC51)

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.

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

Transkrypt:

Wskaźniki i tablice.

Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Zmienna to fragment pamięci o określonym rozmiarze identyfikowany za pomocą nazwy, w którym może być przechowywana wartość określonego typu. <typ> <nazwa>; Wskaźnik to zmienna zawierająca adres pamięci komputera odpowiadający innej zmiennej. <typ> * <nazwa>;

&Zmienna1 &Zmienna2 & & Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = 4; Operator (adresu) & zwraca adres do zmiennej. & <nazwazmiennej> Operator (wyłuskania) * to wartość na podstawie jej adresu. * <nazwazmiennejadresowej>

&Zmienna2 & & Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = 4; &Zmienna1; = &Zmienna2; Operator (adresu) & zwraca adres do zmiennej. & <nazwazmiennej> Operator (wyłuskania) * to wartość na podstawie jej adresu. * <nazwazmiennejadresowej>

& & Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Operator (adresu) & zwraca adres do zmiennej. & <nazwazmiennej> Operator (wyłuskania) * to wartość na podstawie jej adresu. * <nazwazmiennejadresowej>

& & Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * ==? 3 * ==? 5 Zmienna1 ==? 5 Zmienna2 ==? 3

& & Zmienna1=5 Zmienna2 =4 =8 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3

& & Zmienna1=5 Zmienna2=3 =4 =8 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3

&Zmienna1 & & Zmienna1=5 Zmienna2=3 =8 =8 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3

& & Zmienna1=5 Zmienna2=3 =8 =4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3

& & Zmienna1=5 Zmienna2=3 =8 =4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3 = + 3; (*)++; (*)--; Zmienna1 ==? 6 Zmienna2 ==? 3

&Zmienna2 & Zmienna1=5 Zmienna2=3 =16 =4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3 = + 3; (*)++; (*)--; Zmienna1 == 6 Zmienna2 == 3

&Zmienna2 & Zmienna1=6 Zmienna2=3 =16 =4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3 = + 3; (*)++; (*)--; Zmienna1 == 6 Zmienna2 == 3

&Zmienna2 & Zmienna1=6 Zmienna2=3 =16 =4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3 = + 3; (*)++; (*)--; Zmienna1 == 6 Zmienna2 == 3

&Zmienna1 &Zmienna2 & Zmienna1=6 Zmienna2=3 =16 =0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = &Zmienna1; = &Zmienna2; Zmienna1 = 5; //Ten sam wynik co * = 5; * = 3; //Ten sam wynik co Zmienna2 = 3; ++; //Zwiększa się o rozmiar typu --; //Zmniejsza się o rozmiar typu * == 3 * == 5 Zmienna1 == 5 Zmienna2 == 3 = + 3; (*)++; (*)--; Zmienna1 == 6 Zmienna2 == 3

Funkcje: argumenty i wskaźniki Argumenty funkcji nie są przekazywane jako zmienne, tylko jako ich wartości. Funkcja nie wykonuje operacji na zmiennych podanych jako argumenty tylko i wyłącznie na ich wartościach. By możliwa była zmiana wartości zmiennej podanej jako argument należy używać jej adresu (wskaźnika) lub referencji. Deklaracja funkcji, która zmienia wartości zmiennych podanych jako parametr: void swap (int *x, int *y) main { { int tmp; tmp=*y; x=5;y=1; *y=*x; swap(&x,&y); *x=tmp;.. Return; } }

Funkcje: argumenty i wskaźniki Argumenty funkcji nie są przekazywane jako zmienne, tylko jako ich wartości. Funkcja nie wykonuje operacji na zmiennych podanych jako argumenty tylko i wyłącznie na ich wartościach. By możliwa była zmiana wartości zmiennej podanej jako argument należy używać jej adresu (wskaźnika) lub referencji. Deklaracja funkcji, która zmienia wartości zmiennych podanych jako parametr: void swap (int &x, int &y) main { { int tmp; tmp=y; x=5;y=1; y=x; swap(x,y); x=tmp;.. Return; } }

Wskaźniki i tablice Między wskaźnikami i tablicami istnieje ścisła zależność. Tablica: int a[10]; Zmienna wskaźnikowa do liczby int: int * wsk; Przypisanie adresu pierwszego elementu tablicy do wskaźnika: wsk = &a[0]; Element wsk + 1 to a[1]. * ( wsk + 2 ) to wartość a[2]. Jeśli do wsk dodamy 5 to będzie wskazywało na a[5] (wtedy wsk-1 to a[4]).

Funkcje: argumenty i wskaźniki void strcpy (char t[], char s[]) { int i =0; while((t[i]=s[i])!='\0')i++; } void strcpy (char *t, char *s) { while((*t=*s)!='\0'){ t++; s++; } }

Funkcje: argumenty i wskaźniki void strcpy (char t[], char s[]) { int i =0; while((t[i]=s[i])!='\0')i++; } void strcpy (char *t, char *s) { while((*t++=*s++)!='\0'); }

Funkcje: argumenty i wskaźniki void strcpy (char t[], char s[]) { int i =0; while((t[i]=s[i])!='\0')i++; } void strcpy (char *t, char *s) { while(*t++=*s++); }

Wskaźniki i tablice Tablice wielowymiarowe: int a[3][10]; Tablica wskaźników: int * w[3]; Wskaźnik do wskaźnika: int **wsk;

Wskaźniki niezdefiniowane, alokacja pamięci Wskaźnikiem niezdefiniowanym jest zmienna wskaźnikowa typu void: void * x; Wskaźnik taki odnosi się do dowolnego ciągu bajtów. Funkcja malloc przypisuje pamięć o danym rozmiarze do zmiennej void * malloc (size_t size); Funkcja free zwalnia pamięć przypisaną do zmiennej void free (void * pointer);

Wskaźniki niezdefiniowane, alokacja pamięci char * znaki; znaki = malloc ( 10 * sizeof ( * znaki ) ); * znaki = 'J'; * (znaki + 1) = 's'; printf ( %s,znaki); //Wyświetli Js strcpy(znaki, Janusz ); printf ( %s,znaki); //Wyświetli Janusz free ( znaki );

Wskaźniki do funkcji Funkcja może mieć również wskaźnik: typzwracany nazwafunkcji (parametry); typzwracany (* nazwawskaźnika)(parametry);

Wskaźniki do funkcji int funkcja(float x,char y) { } int (* wskaznik)(float,char); wskaznik = &funckja; int x=*wskaznik(3.2,'a');

Wskaźniki do funkcji int funkcja(float x,char y) { } int (* wskaznik)(float,char); wskaznik = funckja; int x=wskaznik(3.2,'a');