Wprowadzenie do programowania w języku C

Save this PDF as:
 WORD  PNG  TXT  JPG

Wielkość: px
Rozpocząć pokaz od strony:

Download "Wprowadzenie do programowania w języku C"

Transkrypt

1 Wprowadzenie do programowania w języku C Część szósta Zmienne wskaźnikowe koncepcja, zastosowania, sztuczki i triki Autor Roman Simiński Kontakt Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

2 Zanim poznamy zmienne wskaźnikowe... Co to jest zmienna? Zmienna jest obiektem w programie przeznaczonym do przechowywania wartości. int i; i = 10; Pamięć operacyjna i Dziwne pojęcia l-wartość i r-wartość 10 Każda zmienna ma swoją nazwę, oraz typ wartości. Zmienne są przechowywane w pamięci operacyjnej, liczba zajętych bajtów zależy od typu zmiennej. Nazwa zmiennej identyfikuje zmienną w programie zwalniając programistę od zastanawiania się, pod jakim adresem w pamięci zmienna jest zlokalizowana. int i; int j; j = 5; i = j; 5 = i; j to l-wartość 5 to r-wartość i to l-wartość j to r-wartość Zmienna może występować po lewej stronie operatora przypisania, mówi się, że jest wtedy l-wartością. Wszystko co może występować po prawej stronie operatora przypisania jest r-wartością. Nie każda r-wartość to l-wartość Obiekt jest nazwanym obszarem pamięci. l-wartość jest wyrażeniem lokalizującym ten obiekt w pamięci Copyright Roman Simiński Strona : 2

3 Zanim poznamy zmienne wskaźnikowe... Motywacja W języku C intensywnie wykorzystuje się l-wartości oparte na zmiennych wskaźnikowych oraz na wyrażeniach te zmienne zawierających. Dokładne opanowanie zasad posługiwania się wskaźnikami jest niezbędne do efektywnego i sprawnego programowania w C i C++. Tej umiejętności nie można pominąć, przeskoczyć lub zostawić na później. Nie oszukujmy się ten, kto nie opanuje zasad posługiwania się wskaźnikami nigdy nie będzie prawdziwym, profesjonalnym programistą wykorzystującym język C lub C++. Copyright Roman Simiński Strona : 3

4 Zmienne wskaźnikowe koncepcja Po co są zmienne wskaźnikowe? Zmienna wskaźnikowa przeznaczona jest do lokalizowania (wskazywania) obiektów w pamięci operacyjnej. Jedyną rolą zmiennej wskaźnikowej jest umożliwienie odwoływania się do obiektów wskazywanych. Naiwna interpretacja graficzna Zmienna wskaźnikowa Obiekt wskazywany Zmienne wskaźnikowe też żyją w pamięci operacyjnej Zmienna wskaźnikowa Obiekt wskazywany Copyright Roman Simiński Strona : 4

5 Zmienne wskaźnikowe koncepcja Trzy stany zmiennej wskaźnikowej Zmienna wskaźnikowa wskazuje na konkretny obiekt w pamięci Zmienna wskaźnikowa Obiekt wskazywany OK Zmienna wskaźnikowa nie wskazuje na żaden obiekt Zmienna wskaźnikowa OK Zmienna wskaźnikowa wskazuje na nie wiadomo co Zmienna wskaźnikowa? Kiepsko Copyright Roman Simiński Strona : 5

6 Zmienne wskaźnikowe koncepcja Co zawiera zmienna wskaźnikowa? Zwykle przyjmuje się, że zmienna wskaźnikowa zawiera w sobie adres obiektu wskazywanego. Zmienna wskaźnikowa 345fa012h Obiekt wskazywany Adres: 345fa012h Jednak zmienna wskaźnikowa nie musi w sobie zawierać adresu bezpośredniego, jej zawartość może, w pewnej realizacji kompilatora, zawierać inną informację, pozwalającą na precyzyjne i jednoznaczne zidentyfikowanie położenia obiektu w pamięci. Przykład W 16-to bitowych realizacjach kompilatorów firmy Borland: zmienna wskaźnikowa zawiera przesunięcie (ang. offset) obiektu względem początku segmentu gdy wskaźniki są krótkie (odwołania wewnątrz segmentu), zmienna wskaźnikowa zawiera adres segmentu i przesunięcie obiektu gdy wskaźniki są długie (odwołania międzysegmentowe). Copyright Roman Simiński Strona : 6

7 Zmienne wskaźnikowe deklaracje W deklaracjach zmiennych wskaźnikowych występuje * int i = 10; int * pi; i Pamięć operacyjna 10 int i = 10; int * pi = NULL; i Pamięć operacyjna 10 pi? pi Deklaracja pod lupą Nieznany obiekt wskazywany Wskaźnik pusty oznacza brak obiektu wskazywanego int * pi ; To oznacza, że deklarowana zmienna wskaźnikowa będzie przeznaczona do lokalizowania w pamięci obiektów typu int. To oznacza, że deklarowana zmienna będzie wskaźnikiem, kompilator wie, ile dla niej zarezerwować pamięci. Nazwa deklarowanej zmiennej wskaźnikowej. Podlega takim samym regułom jak nazwy innych zmiennych. Często zawiera p lub ptr od pointer. Copyright Roman Simiński Strona : 7

8 Zmienne wskaźnikowe deklaracje Rola wskaźnika pustego NULL Tak zdefiniowana zmienna wskaźnikowa: int * pi; ma wartość początkową zależną od kontekstu deklaracji. Jeżeli ta zmienna jest klasy auto, to jej wartość jest przypadkowa zmienna wskazuje zatem na bliżej nieznany obiekt w pamięci. W pliku nagłówkowym stddef.h zdefiniowana stałą NULL, reprezentującą wskaźnik pusty, niezależny od platformy i implementacji. Tak zdefiniowana zmienna: int * pi = NULL; jest wskaźnikiem pustym, a więc nie wskazuje żadnego obiektu w pamięci. To, czy zmienna wskaźnikowa jest wskaźnikiem pustym można sprawdzić: if( pi!= NULL ) if( pi == NULL ) W języku C jawnie inicjowanie zmiennych wskaźnikowych oraz posługiwanie się wartością NULL (a nie wartością 0) jest dobrą praktyką programistyczną. Copyright Roman Simiński Strona : 8

9 Zmienne wskaźnikowe podstawowe operacje Przypisywanie wartości zmiennym wskaźnikowym int i = 10; int * pi = NULL; pi = &i; i Pamięć operacyjna 10 O biekt ws kazywany pi Przypisanie pod lupą pi = & i ; Od momentu tego przypisania, pi wskazuje zmienną i, umożliwiając realizację dowolnych operacji na tej zmiennej. Jednoargumentowy operator & buduje wyrażenie wskaźnikowe lokalizujące zmienną w pamięci operacyjnej. Argument musi być l-wartością nie odnoszącą się do obiektu register ani pola bitowego. Wyrażenie wskaźnikowe lokalizujące zmienną i w pamięci. Copyright Roman Simiński Strona : 9

10 Zmienne wskaźnikowe podstawowe operacje Odwoływanie sie do obiektu wskazywanego int i = 10; int * pi = NULL; pi = &i; *pi = 20; i pi Pamięć operacyjna 20 *pi Odwołanie pod lupą * pi = 20 ; Ten zapis oznacza obiekt wskazywany przez pi. Zapis *pi może wystąpić wszędzie tam, gdzie może wystąpić i. Zmienna pi jest aliasem, linikiem do obiektu i. Jednoargumentowy operator adresowania pośredniego * daje w wyniku obiekt wskazywany przez argument pi. Dowolne wyrażenie typu zgodnego z typem obiektu wskazywanego. Copyright Roman Simiński Strona : 10

11 Zmienne wskaźnikowe podstawowe operacje Odwoływanie sie do obiektu wskazywanego Po przypisaniu: pi = &i; te fragmenty są równoważne: char s[] = 123 ; *pi = atoi( s ); *pi += 10; printf( %d, *pi ); char s[] = 123 ; i = atoi( s ); i += 10; printf( %d, i ); Jeżeli wskaźnik pi wskazuje na zmienną i, to *pi może wystąpić wszędzie tam, gdzie może wystąpić i. Zmienna pi jest aliasem, linikiem do i. Copyright Roman Simiński Strona : 11

12 Zmienne wskaźnikowe zastosowania Realizacja przekazywania parametrów przez zmienną z użyciem wskaźników void inc( int * pi ) *pi = *pi + 1; } int i = 10; inc( &i ); i pi Pamięć operacyjna *pi=*pi+1 void getint( int * ptr ) char s[ 80 ]; gets( s ); *ptr = atoi( s ); } int liczba; getint( &liczba ); liczba ptr Pamięć operacyjna 123 W języku C wykorzystuje się parametry będące wskaźnikami do realizacji przekazywania parametrów działającego podobnie do przekazywania przez zmienną. void zamien( int * pierwszy, int * drugi ) int s; /* Schowek */ } s = *pierwszy; *pierwszy = *drugi; *drugi = s; a 5 b 10 s 5 int a = 5, b = 10; printf( "a=%d b=%d", a, b ); zamien( &a, &b ); printf( "a=%d b=%d", a, b ); a=5 b=10 a=10 b=5 Copyright Roman Simiński Strona : 12

13 Zmienne wskaźnikowe zastosowania Dynamiczny przydział pamięci Dynamiczny przydział pamięci polega na zarezerwowaniu fragmentu pamięci w obszarze pamięci wolnej zwanej stertą, dla obiektu pamięciowego zwanego dynamicznym. p Sterta a int * p = NULL; p = malloc( sizeof( int ) ); *p = 10; free( p ); p p 10 Sterta a Sterta a Przydziela się fragment o określonym rozmiarze, jedyny sposób na odwoływanie się do takiego obiektu to wykorzystanie wskaźnika. p Sterta a Strona : Copyright Roman Simiński 13

14 Zmienne wskaźnikowe zastosowania Dynamiczny przydział pamięci double * pole; pole = malloc( sizeof( double ) ); if( pole!= NULL ) *pole = PI * r * r; printf( "Pole kola: %f", *pole ); free( pole ); } Rezultatem funkcji malloc jest wskaźnik do przydzielonego dynamicznie obszaru pamięci przeznaczonego dla obiektu o rozmiarze sizeof(double). Wskaźnik będzie miał wartość NULL jeżeli pamięć nie została przydzielona. Zwalnia obszar pamięci wskazywany przez wskaźnik pole. W tym przykładzie przydział pamięci wydaje sie bezsensowny. Nie lepiej posłużyć się zwykłą zmienną typu double? Tak, dynamiczny przydział sprawdza się w innych sytuacjach, ale o tym później.... Copyright Roman Simiński Strona : 14

15 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Tablice a wskaźniki Nazwa tablicy jest interpretowana jako ustalony wskaźnik na jej początek (pierwszy element). tab int tab[ 10 ]; 10 elementów int tab[ 10 ]; int * p; p = tab; /* lub p = &tab[ 0 ]*/ 10 elementów tab p Copyright Roman Simiński Strona : 15

16 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Tablice a wskaźniki, cd.... tab[ 0 ] = 5 tab[ 1 ] = 1 tab[ 2 ] = 10 tab[ i ] = 22 Odwołania równoważne *p = 5 *( p + 1 ) = 1 *( p + 2 ) = 10 *( p + i ) = 22 tab p p + 0 p + 1 p + 2 p + i i tablica + indeks Odwołania równoważne wskaźnik + przesunięcie Wyrażenie p + i jest wyrażeniem wskaźnikowym, wskazuje ono na obiekt oddalony o i obiektów od p. Wartość dodawana do wskaźnika jest skalowana rozmiarem typu obiektu wskazywanego. Copyright Roman Simiński Strona : 16

17 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Tablice a wskaźniki, cd.... Każde odwołanie: tab[ i ] można zapisać tak: *( tab + i ) Oraz każde odwołanie: *( p + i ) można zapisać tak: p[ i ] Wskaźniki to nie to samo, co tablice int tab[ 10 ]; int * p = tab; tab = p; tab++; p = tab + 8; p++; tab p Źle OK int tab[ 10 ] wskaźnik + obszar danych int * p = tab zakotwiczony wskaźnik Nazwa tablicy jest ustalonym (niemodyfikowalnym) wskaźnikiem na pierwszy jej element. Nazw tablic nie wolno modyfikować! Wskaźniki można. Copyright Roman Simiński Strona : 17

18 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Ciekawostka Wiemy, że: tab[ i ] można zapisać tak: *( tab + i ) Skoro dodawanie jest przemienne: *( i + tab ) czy można zapisać tak?: i[ tab ] Przykład: char napis[] = "język c"; puts( napis ); 0[ napis ] = 'J'; /* Zamiast napis[ 0 ] */ 6[ napis ] = 'C'; /* Zamiast napis[ 6 ] */ język c puts( napis ); Copyright Roman Simiński Strona : 18

19 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Dlaczego nie wolno przypisywać tablic? int a[ 10 ]; int b[ 10 ]; b = a; /* Nie wolno przypisywać do siebie tablic */ Gdyby przypisywanie było możliwe... a b Po wykonaniu tej linii: b = a; gubimy obszar danych tablicy b! a b Copyright Roman Simiński Strona : 19

20 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Arytmetyka na wskaźnikach nie tylko dla typu char Załóżmy, że zmienne wskaźnikowe zawierają bezpośrednio adresy komórek pamięci. char s[ 6 ] = "Napis"; char * p1 = s; char * p2 = &s[ 4 ] int n = 2; Adresy N a p i s \ s p1 p p2 p2 - p1 + 1 = = 5 Wskaźnik i wartość całkowita mogą być dodawane i odejmowane, wyrażenie: s + n oznacza adres n-tego elementu od miejsca na które wskazuje s Wskaźniki związane z jedną tablicą można odejmować, jeżeli p1 < p2 to wyrażenie: p2 p1 + 1 określa liczbę elementów pomiędzy p1 a p2 wliczając w to p2 Copyright Roman Simiński Strona : 20

21 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Arytmetyka na wskaźnikach podsumowanie Dozwolone operacje wskaźnikowe to: przypisywanie wskaźników do obiektów tego samego typu, dodawanie lub odejmowanie wskaźnika i liczby całkowitej, odejmowanie lub porównanie dwóch wskaźników związanych z ta samą tablicą, przypisanie wskaźnikowi wartości zero (wskazanie puste NULL) lub porównanie ze wskazaniem pustym. Copyright Roman Simiński Strona : 21

22 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Wskaźniki w akcji metamorfoza funkcji put_string void put_string( char s[] ) int i; for( i = 0; s[ i ]!= '\0'; i++ ) putchar( s[ i ] ); } Wersja początkowa void put_string2( char * s ) for( ; *s!= '\0'; s++ ) putchar( *s ); } Eliminujemy zmienną i void put_string3( char * s ) for( ; *s!= '\0' ; putchar( *s++ ) ) ; } Kompresja iteracji for Najpierw pobierz znak wskazywany przez s, użyj go. *s ++ Potem zwiększ o jeden wartość wskaźnika s będzie on wtedy wskazywał na następny element tablicy. Copyright Roman Simiński Strona : 22

23 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Wskaźniki pod lupą jak działa funkcja put_string4 void put_string4( char * s ) while( *s ) putchar( *s++ ); } Iteracja while nie jest taka zła... Znak '\0' to bajt o wartości 0 Najpierw pobierz znak wskazywany przez s, użyj go. *s ++ Potem zwiększ o jeden wartość wskaźnika s będzie on wtedy wskazywał na następny element tablicy. s Numer przebiegu iteracji while s++ s++ s++ s++ char imie[ 80 ] = Aga ; put_string4( imie ); imie A g a \0 *s *s *s *s Aga_ Koniec iteracji while Copyright Roman Simiński Strona : 23

24 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Wskaźniki pod lupą metamorfoza funkcji strcpy char s1[ 80 ] = ""; char s2[ 20 ]; strcpy( s2, s1 ); Wersja początkowa Przypomnienie jak to działa s i++ s1 J ę z y k C \ d s2 J ę z y k C \ void strcpy( char d[], char s[] ) int i; for( i = 0; s[ i ]!= '\0'; i++ ) d[ i ] = s[ i ]; d[ i ] = '\0'; } 6 19 Copyright Roman Simiński Strona : 24

25 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Wskaźniki pod lupą metamorfoza funkcji strcpy void strcpy1( char * d, char * s ) while( *s!= '\0' ) *d = *s; d++; s++; } *d = '\0'; } Odwołania wskaźnikowe To właściwie nie wiele zmienia, poza wyeliminowaniem zmiennej i void strcpy2( char * d, char * s ) while( *s!= '\0' ) *d++ = *s++; *d = '\0'; } Kompresja krok pierwszy Copyright Roman Simiński Strona : 25

26 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Wskaźniki pod lupą metamorfoza funkcji strcpy void strcpy3( char * d, char * s ) while( ( *d++ = *s++ )!= '\0' ) ; } Kompresja krok drugi Wartością tego wyrażenia jest znak (bajt) przepisany z obszaru wskazywanego przez s do obszaru wskazywanego przez d. Operator = jest lewostronnie łączny ( *d++ = *s++ ) Pobierz znak wskazywany, wykorzystaj go, zwiększ wskaźnik tak, by pokazywał na następny element tablicy.!= '\0' void strcpy4( char * d, char * s ) while( *d++ = *s++ ) ; } Kompresja krok trzeci Znak '\0' to bajt o wartości 0 Copyright Roman Simiński Strona : 26

27 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Wskaźniki pod lupą metamorfoza funkcji strcpy Często spotykaną praktyką w funkcjach bibliotecznych jest udostępnianie wskaźnika do tablicy (jednej z tablic) będącej parametrem: char * strcpy5( char * d, char * s ) while( *d++ = *s++ ) ; return d; } Tablica d jako rezultat funkcji Pozwala to na skrócenie kodu, załóżmy następujące definicje tablic s1, s2, s3: char s1[ 80 ] = ""; char s2[ 80 ]; char s3[ 80 ]; Następujący fragment kodu: strcpy5( s2, s1 ); strcpy5( s3, s2 ); puts( s3 ); Można zapisać krócej: puts( strcpy5( s3, strcpy5( s2, s1 ) ) ); Copyright Roman Simiński Strona : 27

28 Zmienne wskaźnikowe zastosowania w przetwarzaniu tablic Wskaźniki pod lupą metamorfoza funkcji strcpy W dotychczasowych realizacjach funkcji strcpyx, funkcja może modyfikować zawartość tablicy źródłowej: char * strcpy5( char * d, char * s ) *s = 'A'; }` Modyfikacja tablicy źródłowej dozwolona, choć merytorycznie niepoprawna Aby temu zaradzić, można zadeklarować parametr reprezentujący tablicę źródłową w specyficzny sposób: char * strcpy6( char * d, const char * s ) *s = 'A'; } Aby funkcja nie mogła zmodyfikować parametru przekazanego za pośrednictwem wskaźnika, należy w deklaracji użyć słowa const. Deklaracja: const char * s; oznacza, że s jest wskaźnikiem na stały (niemodyfikowalny) obiekt typu char. Copyright Roman Simiński Strona : 28

29 Zmienne wskaźnikowe uwagi Wskaźniki a kwalifikator const Można wyróżnić następujące kombinacje definicji wskaźnika z/bez const: const int * const p; /* Ustalony wskaźnika na niemodyfikowalny obiekt */ int * const p; /* Ustalony wskaźnika na modyfikowalny obiekt */ const int * p; /* Zwykły wskaźnika na niemodyfikowalny obiekt */ int * p; /* Zwykły wskaźnik na zwykły obiekt */ Wersja najbardziej restrykcyjna pod lupą const int * const p; To się nie uda, ustalony wskaźnik należy zainicjować! int i = 10; const int * const p = &i; j = *p + 10; *p = 20; p = &j; To jest OK, odwołanie nie modyfikujące obiektu Niedozwolone, odwołanie modyfikujące obiekt Niedozwolone, odwołanie modyfikujące wskaźnik Copyright Roman Simiński Strona : 29

30 Zmienne wskaźnikowe uwagi Ważna sprawa ostrożnie z parametrami wskaźnikowymi! W funkcjach bibliotecznych języka C stałą praktyką jest deklarowanie parametrów tablicowych z wykorzystaniem wskaźników, np: int strlen( char * s ); zamiast int strlen( char s[] ); Wymaga to dokładnego przeczytania dokumentacji, bowiem programiści często się mylą. Rozważmy następujący przykład (fragment systemu pomocy firmy Borland): Prototype char *gets(char *s); Description Gets a string from stdin. gets collects a string of characters terminated by a new line from the standard input stream stdin and puts it into s. The new line is replaced by a null character (\0) in s. gets allows input strings to contain certain whitespace characters (spaces, tabs). gets returns when it encounters a new line; everything up to the new line is copied into s. Copyright Roman Simiński Strona : 30

31 Zmienne wskaźnikowe uwagi Ważna sprawa ostrożnie z parametrami wskźnikowymi, cd... Niedokładna lektura dokumentacji może sugerować, że funkcji należy użyć tak: char * imie; printf( "Podaj imie: " ); gets( imie ); imie??? Aga gets( imie ) A trzeba np. tak: char imie[ 80 ]; printf( "Podaj imie: " ); gets( imie ); imie Aga gets( imie ) Copyright Roman Simiński Strona : 31

32 Dynamiczny przydział pamięci Dynamiczna alokacja tablic Dynamiczny przydział pamięci polega na zarezerwowaniu fragmentu pamięci w obszarze pamięci wolnej zwanej stertą, dla obiektu pamięciowego zwanego dynamicznym. char * s = NULL; int n = 30; s = malloc( n * sizeof( char ) ); strcpy( s, " " ); strcat( s, "fajny jest!" ); puts( s ); free( s ); Na tablicach alokowanych dynamicznie na stercie, można wykonywać takie same operacje, jak na tablicach statycznych. Należy tylko uważnie przydzielać i zwalniać pamięć. s s s s Sterta a Sterta a Sterta a fajny Pamięć jest! operacyjna Sterta a fajny Pamięć jest! operacyjna Copyright Roman Simiński Strona : 32

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

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

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

Bardziej szczegółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część piąta Tablice koncepcja, reprezentacja, przetwarzanie Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaźniki. Informatyka 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ą

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część trzynasta Tablice struktur, pliki struktur Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

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

Wstęp do wskaźników w języku ANSI C Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,

Bardziej szczegółowo

Wskaźniki w C. Anna Gogolińska

Wskaźniki w C. Anna Gogolińska Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik

Bardziej szczegółowo

Podstawy programowania komputerów

Podstawy programowania komputerów Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana

Bardziej szczegółowo

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

Języki programowania obiektowego Nieobiektowe elementy języka C++ Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Co to

Bardziej szczegółowo

Techniki Programowania wskaźniki

Techniki Programowania wskaźniki 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

Bardziej szczegółowo

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część trzecia Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów

Bardziej szczegółowo

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

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem. Podstawy programowania Wykład PASCAL Zmienne wskaźnikowe i dynamiczne 1 dr Artur Bartoszewski - Podstawy prograowania, sem. 1- WYKŁAD Rodzaje zmiennych Zmienne dzielą się na statyczne i dynamiczne. Zmienna

Bardziej szczegółowo

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część ósma Tablice struktur, pliki struktur Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w

Bardziej szczegółowo

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

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,

Bardziej szczegółowo

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

Bardziej szczegółowo

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Struktury czyli rekordy w C/C++

Struktury czyli rekordy w C/C++ Struktury czyli rekordy w C/C++ Wprowadzenie do programowania w języku C struktury. pola bitowe, unie Struktury (rekordy) są złożonymi zmiennymi, składającymi się z elementów różnych typów zwanych polami,

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część ósma Tablice znaków i przetwarzanie napisów Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

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

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

Bardziej szczegółowo

Stałe, tablice dynamiczne i wielowymiarowe

Stałe, tablice dynamiczne i wielowymiarowe Stałe, tablice dynamiczne i wielowymiarowe tylko do odczytu STAŁE - CONST tablice: const int dni_miesiaca[12]=31,28,31,30,31,30,31,31,30,31,30,31; const słowo kluczowe const sprawia, że wartość zmiennej

Bardziej szczegółowo

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część druga Instrukcje sterujące przebiegiem programu Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie

Bardziej szczegółowo

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

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury, , Programowanie, uzupełnienie notatek: dr Jerzy Białkowski , 1 2 3 4 , Wczytywanie liczb , Wczytywanie liczb 1 #include 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int rozmiar, numer

Bardziej szczegółowo

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem. Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Typy c.d. 2 Typy zmiennych Instrukcja typedef -

Bardziej szczegółowo

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

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster Wykład nr 3 Temat: Wskaźniki i referencje. Cytaty: Mylić się jest rzeczą ludzką, ale żeby coś naprawdę spaprać potrzeba komputera. Edward Morgan Forster Gdyby murarze budowali domy tak, jak programiści

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

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

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie. XV. Wskaźniki 15.1. Odczytywanie adresu pamięci istniejących zmiennych Język C++ w bardzo łatwy sposób umoŝliwia nam pobieranie adresu pamięci wybranych zmiennych. Wskaźnik zajmuje zazwyczaj 4 bajty bez

Bardziej szczegółowo

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

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

Bardziej szczegółowo

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

Stałe i zmienne znakowe. Stała znakowa: znak Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby

Bardziej szczegółowo

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.

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. Część XXII C++ 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. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; }; Typy pochodne. Referencje Referencja jest inną nazwą zmiennej. KURS C/C++ WYKŁAD 7 Referencje tworzymy przy pomocy unarnego operatora &: int a; int &refer = a; // referencja musi być inicjowana Powyższe

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

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

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 i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce. Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

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

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

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

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)

Bardziej szczegółowo

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak: Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji

Bardziej szczegółowo

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

Instytut Mechaniki i Inżynierii Obliczeniowej  Wydział Mechaniczny Technologiczny Politechnika Śląska Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium

Bardziej szczegółowo

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1 Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).

Bardziej szczegółowo

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,

Bardziej szczegółowo

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 17 1. Typy i zmienne Jak wiemy, komputer

Bardziej szczegółowo

Wskaźniki. Pamięć dynamiczna

Wskaźniki. Pamięć dynamiczna Wskaźniki. Pamięć dynamiczna wer. 8 z drobnymi modyfikacjami Wojciech Myszka 2015-04-13 11:39:01 +0200 Wskaźniki Wskaźniki to podstawa C. Kto nie umie się nimi posługiwać ten nie potrafi wykorzystać siły

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 4

Programowanie komputerowe. Zajęcia 4 Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości

Bardziej szczegółowo

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

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można

Bardziej szczegółowo

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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

6 Przygotował: mgr inż. Maciej Lasota

6 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 6 1/5 Język C Instrukcja laboratoryjna Temat: Wskaźniki. 6 Przygotował: mgr inż. Maciej Lasota 1) Wskaźniki. Wskaźniki (zmienne wskaźnikowe) stanowią jedno z fundamentalnych pojęć języka

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Microsoft IT Academy kurs programowania

Microsoft IT Academy kurs programowania Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego

Bardziej szczegółowo

Referencje do zmiennych i obiektów

Referencje do zmiennych i obiektów Referencje do zmiennych i obiektów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

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

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf(\n podaj wartosc liczby a\n); scanf(%d,&a); pa=&a; Ćwiczenie 4 4.1. Wskaźnik na zmienną Wskaźniki, tablice Deklaracja int *pa; oznacza, że pa jest wskaźnikiem na obiekt typu int. Zmienna pa zawiera adres pamięci, zarezerwowanej na zmienną typu int. Chcąc

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

1 Wskaźniki i listy jednokierunkowe

1 Wskaźniki i listy jednokierunkowe 1 Wskaźniki i listy jednokierunkowe 1.1 Model pamięci komputera Pamięć komputera możemy wyobrażać sobie tak, jak na rysunku: Zawartość:... 01001011 01101010 11100101 00111001 00100010 01110011... adresy:

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym

Bardziej szczegółowo

Funkcja (podprogram) void

Funkcja (podprogram) void Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

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

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Podstawy programowania w języku C

Podstawy programowania w języku C Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu

Bardziej szczegółowo

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne import javax.swing.*; import java.util.*; public class Napis4 { String wynik = ""; static int ile_obiektow

Bardziej szczegółowo

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

Wstęp. do języka C na procesor 8051. (kompilator RC51) Wstęp do języka C na procesor 8051 (kompilator RC51) Kompilator języka C Kompilator RC51 jest kompilatorem języka C w standardzie ANSI Ograniczeń w stosunku do ANSI jest niewiele głównie rzadkie operacje

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

Platformy Programistyczne Podstawy języka Java

Platformy Programistyczne Podstawy języka Java Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo

Bardziej szczegółowo

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np. ZMIENNE 39 zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np. przydział pamięci). 40 Nazewnictwo zmiennych Dozwolone

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; Ogólna postać definicji tablicy: TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; np. int tablica [ 10 ]; // 10-cio elementowa tablica liczb całkowitych char tekst

Bardziej szczegółowo

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

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty. Funkcje. Deklaracja funkcji: KURS C/C++ WYKŁAD 8 #include //deklaracje funkcji: printf(...), scanf(...) #include //double sqrt (double ) #include //void clrscr (void) void main

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY. LEKCJA 12. Wskaźniki i tablice w C i C++. W czasie tej lekcji: 1. Dowiesz się więcej o zastosowaniu wskaźników. 2. Zrozumiesz, co mają wspólnego wskaźniki i tablice w języku C/C++. WSKAŹNIKI I TABLICE

Bardziej szczegółowo