Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

19

Click here to load reader

Transcript of Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

Page 1: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

Programowanie C/C++Język C - zarządzanie pamięcią, struktury,wybrane funkcje biblioteki standardowej

wykład III

dr Jarosław Mederski

uzupełnienie notatek: dr Jerzy Białkowski

Page 2: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

1 Zarządanie pamięciąmalloc, calloc, realloc, free

2 StrukturyStruktury

3 Wybrane funkcje biblioteki standardowej<stdio.h><string.h><stdlib.h><math.h>

4 Wnioski

Page 3: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

Wczytywanie liczb

1 #include <s t d i o . h>2 #include < s t d l i b . h>34 int main ( ) {5 int rozmiar , numer = 0 ;67 scanf ("%d" , &rozmiar ) ;8 float tab [ rozmiar ] , liczba ;910 while ( numer < rozmiar ) {11 scanf ("%f" , &liczba ) ;12 tab [ numer++] = liczba ;13 }/* w h i l e */1415 while ( numer ) {16 printf ("%f\n" , tab[−−numer ] ) ;17 }18 return 0 ;19 }

Page 4: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

Wczytywanie liczb1 #include <s t d i o . h>2 #include < s t d l i b . h>34 int main ( ) {5 int rozmiar , numer = 0 ;67 scanf ("%d" , &rozmiar ) ;8 float tab [ rozmiar ] , liczba ;910 while ( numer < rozmiar ) {11 scanf ("%f" , &liczba ) ;12 tab [ numer++] = liczba ;13 }/* w h i l e */1415 while ( numer ) {16 printf ("%f\n" , tab[−−numer ] ) ;17 }18 return 0 ;19 }

Page 5: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

malloc, realloc i freeFunkcja malloc zwraca wskaźnik do obszaru pamięci dlaobiektu o rozmiarze rozmiar.

void *malloc(size_t rozmiar);

Funkcja malloc zwraca wskaźnik do obszaru pamięci dlatablicy ilosc elementów, z których każdy ma rozmiar rozmiari zeruje go.

void *calloc(size_t ilosc, size_t rozmiar);

Funkcja realloc zmienia rozmiar pamięci dla obiektuwskazanego przez wsk.

void *realloc(void *wsk, size_t rozmiar);

Funkcja free zwalnia obszar pamięci wskazany przez wsk.

void free(void *wsk);

Page 6: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

malloc, realloc i freeFunkcja malloc zwraca wskaźnik do obszaru pamięci dlaobiektu o rozmiarze rozmiar.

void *malloc(size_t rozmiar);

Funkcja malloc zwraca wskaźnik do obszaru pamięci dlatablicy ilosc elementów, z których każdy ma rozmiar rozmiari zeruje go.

void *calloc(size_t ilosc, size_t rozmiar);

Funkcja realloc zmienia rozmiar pamięci dla obiektuwskazanego przez wsk.

void *realloc(void *wsk, size_t rozmiar);

Funkcja free zwalnia obszar pamięci wskazany przez wsk.

void free(void *wsk);

Page 7: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

malloc, realloc i freeFunkcja malloc zwraca wskaźnik do obszaru pamięci dlaobiektu o rozmiarze rozmiar.

void *malloc(size_t rozmiar);

Funkcja malloc zwraca wskaźnik do obszaru pamięci dlatablicy ilosc elementów, z których każdy ma rozmiar rozmiari zeruje go.

void *calloc(size_t ilosc, size_t rozmiar);

Funkcja realloc zmienia rozmiar pamięci dla obiektuwskazanego przez wsk.

void *realloc(void *wsk, size_t rozmiar);

Funkcja free zwalnia obszar pamięci wskazany przez wsk.

void free(void *wsk);

Page 8: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

malloc, realloc i freeFunkcja malloc zwraca wskaźnik do obszaru pamięci dlaobiektu o rozmiarze rozmiar.

void *malloc(size_t rozmiar);

Funkcja malloc zwraca wskaźnik do obszaru pamięci dlatablicy ilosc elementów, z których każdy ma rozmiar rozmiari zeruje go.

void *calloc(size_t ilosc, size_t rozmiar);

Funkcja realloc zmienia rozmiar pamięci dla obiektuwskazanego przez wsk.

void *realloc(void *wsk, size_t rozmiar);

Funkcja free zwalnia obszar pamięci wskazany przez wsk.

void free(void *wsk);

Page 9: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

1 #include <s t d i o . h>2 #include < s t d l i b . h> /*mal loc , r e a l l o c , f r e e */3 int main ( ) {4 size_t rozm = 10 , numer = 0 ;5 float *tab , *tmp , liczba ;67 tab = ( float *) malloc ( rozm * sizeof ( float ) ) ;89 while ( scanf ("%f" , &liczba )==1){10 if ( numer==rozm ) {11 tmp = ( float *)12 realloc (tab , ( rozm*=2)*sizeof (* tab ) ) ;13 tab = tmp ;14 }/* i f */15 tab [ numer++] = liczba ;16 }/* w h i l e */17 while ( numer )18 printf ("%f\n" , tab[−−numer ] ) ;1920 free ( tab ) ;21 return 0 ;22 }

Page 10: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

Struktury

Struktura jest obiektem złożonym z jednej lub kilku zmiennychróżnych typów.

struct nazwa {typ1 pole1;typ2 pole2;...} instancje;

Uwaga: można opuścić nazwę nazwa (i mamy wówczas doczynienia ze strukturą anonimową) lub instancje (zmienne).

Page 11: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

1 #include <s t d i o . h>23 struct wektor {4 double x ;5 double y ;6 } ;78 int main ( ) {9 struct wektor v1 = {2 , 3} ;1011 struct wektor v2 ;12 v2 . x = −2;13 v2 . y = 3 ;1415 return 0 ;16 }

Page 12: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

1 #include <s t d i o . h>2 #include <math . h> /* s q r t ( ) */34 struct wektor {5 double x ;6 double y ;7 } ;89 double dlugosc ( struct wektor *v ) {10 return sqrt ( v−>x * v−>x + v−>y * v−>y ) ;11 }1213 int main ( ) {14 struct wektor v1={−3,4} , *v2 ;15 v2 = &v1 ;16 printf ("%f\n" , v1 . x ) ;17 printf ("%f\n" , (*v2 ) . x ) ;18 printf ("%f\n" , v2−>x ) ;19 printf ("Dlugosc wektora: %f\n" , dlugosc (v2 ) ) ;2021 return 0 ;22 }

Page 13: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

<stdio.h>

printf, scanf, fopen, fclose, fprintf, fscanf, ...

Zobacz Kernighan, Ritchie „Język ANSI C”.

Page 14: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

1 #include <s t d i o . h>23 int main ( )4 {5 printf ("Znaki %c %c \n" , 'c' , 70) ;6 printf ("Liczby rzeczywiste: %d %ld\n" , 2010 ,←↩

123456789L ) ;7 printf ("Wypelnianie miejsca: %10d \n" , 2010) ;8 printf ("Wypelnianie miejsca zerami: %010d \n←↩

" , 2010) ;9 printf ("Liczby w roznych systemach: %d %x %o←↩

\n" , 100 , 100 , 100) ;10 printf ("Liczby rzeczywiste: %3.2f %+.0e %E \←↩

n" , 3 . 1 4 1 6 , ←↩−33247382478374.1418378734738476 ,3.1416) ;

11 printf ("%s \n" , "Ala ma kota" ) ;12 return 0 ;13 }

Page 15: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

<string.h>

strcpy, strncpy, strcmp, strncmp, strlen, ...

Page 16: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

<stdlib.h>

atoi, atof, atol, rand, srand,malloc, realloc, free, system, ...

Page 17: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

<math.h>

sin, cos, tan, asin, acos, atan,exp, log, log10, pow, sqrt, floor, ...

Page 18: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

Inne użyteczne konstrukcje języka C� typy wyliczeniowe (enum) – zastępują definicje (#define)� unie (mają składnię podobną do struktur, zamiast słowastruct używamy union) – wszystkie jej polarozpoczynają się w tym samym obszarze pamięci

� funkcje o zmiennej liczbie parametrów (np. printf,scanf) – ich deklaracje używają konstrukcji ”...”, aimplementacje używają pewnych makr

� zmienne zewnętrzne (których deklaracja poprzedzona jestsłowem extern) – używane, gdy definicja zmiennejznajduje się np. w innym pliku

� zmienne statyczne (których deklaracja poprzedzona jestsłowem static) – inicjalizowane są tylko raz, niezależnieod miejsca deklaracji (też dla funkcji)

� definiowanie typów (typedef)� metody przekazywania argumentów do funkcji

� przez wartość� przez adres

Page 19: Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...

ProgramowanieC/C++Język C -zarządzaniepamięcią,struktury,wybranefunkcjebibliotekistandardowejwykład III

dr JarosławMederski

Spis

Zarządaniepamięciąmalloc, calloc,realloc, free

StrukturyStruktury

Wybranefunkcjebibliotekistandardowej<stdio.h>

<string.h>

<stdlib.h>

<math.h>

Wnioski

Dziękuję za uwagę.