Programowanie C/C++ Jezyk C - zarzadzanie pamiecia, struktury ...
Click here to load reader
Transcript of 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
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
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 }
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 }
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);
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);
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);
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);
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 }
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).
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 }
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 }
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”.
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 }
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, ...
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, ...
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, ...
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
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ę.