1 / 14

Informatyka I Wykład 12

Informatyka I Wykład 12. GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko). kopiowanie. Ala ma kota. obiekt A[12]. Ala ma kota. wskaźnik *B. Adres. TROCHĘ TAJEMNIC. char A[12]=“Ala ma kota”;. char *B=“Ala ma kota”;. C[ ]. printf(“Ala ma kota”); - argumentem jest adres!!.

Download Presentation

Informatyka I Wykład 12

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatyka IWykład 12 GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko) Jerzy F. Kotowski

  2. kopiowanie Ala ma kota obiekt A[12] Ala ma kota wskaźnik *B Adres TROCHĘ TAJEMNIC • char A[12]=“Ala ma kota”; • char *B=“Ala ma kota”; C[ ] • printf(“Ala ma kota”); - argumentem jest adres!! • char C[ ]=“Ala ma kota”; - policz sobie sam ?!?! Jerzy F. Kotowski

  3. 12_1 Uchylanie (rąbka) tajemnicy • Dodatkowa możliwość:int Ula[ ] = {3,5.3,4.1,-5}; • int *Ala = {3,5.3,4.1,-5}; • int Ela[4] = {3,5.3,4.1,-5}; • Ala++; OK!! • Ula++; !!! ERROR • Ela++; !!! ERROR • Są to konsekwencje wzoru a[i] º *(a + i) • type *ident; Û type ident[ ]; • Przykład: • double Ula[ ]; Û double *Ula; • Użycie identyczne jak w przypadku “prawdziwej” tablicy: Ula[1]; Û Ela[1]; Jerzy F. Kotowski

  4. Ala ma kota s[0] s[1] s[2] Kopiowanie do kolejnych wierszy tablicy s Ala ma kota v[0] v[1] v[2] Podstawianie adresów do wskaźników Uchylanie tajemnicy c.d. • char s[3][5] = {“Ala”, “ma”, “kota”}; • char ss[ ][5] = {“Ala”, “ma”, “kota”}; - policz sam!? • Alternatywa: char *v[3] = {“Ala”, “ma”, “kota”};- v jest tablicą wskaźników do obiektów typu char. • Użycie identyczne: v[0][0]=‘E’; v[2][2]=‘s’; Jerzy F. Kotowski

  5. Dynamiczna alokacja pamięci • double *p = malloc(100*sizeof(double)); • Prototyp w alloc.h i w stdlib.h:void *malloc(size_t size); • (...Returns a pointer to the newly allocated block, or NULL if not enough space exists for the new block…) • Inne funkcje (wybrane):allocmem farmalloc calloc free • Wybór funkcji zależeć może od potrzeb oraz używanego modelu pamięci:Tiny Small Medium Compact Large Huge Jerzy F. Kotowski

  6. Dynamiczna alokacja pamięci - C++ • double *p = new double[100]; • Składnia:pointer_to_name = new name [name_initializer]; • Niesamowicie ważne: The storage duration ot the new object is from the point of creation until the operator delete deallocates its memory, or until the end of the program. • To znaczy, że zajęty obszar trzeba koniecznie zwalniać własnymi rękoma: delete(p); • new delete - operatory jednoargumentowe (wiadomo jaki prirytet) języka C++ Jerzy F. Kotowski

  7. Składnia C: char *Ala = malloc(12); strcpy(Ala,”Ala ma kota); Ala[0]=‘U’; free(Ala); Składnia C++: char *Ala = new char[12]; strcpy(Ala,”Ala ma kota); Ala[0]=‘U’; delete(Ala); Przykłady użycia • Narzędzia muszą być “do pary”, tzn.: • malloc - freenew - delete Jerzy F. Kotowski

  8. 12_2 Program info_12_2.cpp • Pełne szaleństwo • Tablica adresów jest zakładana dynamicznie • Nie wolno zapominać o zwalnianiu pamięci - może to być trudne • Niech żyje destruktor!!! • Zachowanie funkcji scanf przy wprowadza-niu kilku wyrazów. • Bufor klawiatury • F-cja void menu(void) • oraz void menu(void) • Tab. jednowymiarowa • void error(char *tekst) • Wywołanie funkcjiscanf • Zwalnianie pamięci • Tablica dwuwymiarowa • Tablica adresów do wierszy jest automatyczna • Można zapomnieć o zwol-nieniu zajętego obszaru Jerzy F. Kotowski

  9. Otoczenie procesora: Wejście klawiatura dysk mysz skaner Wyjście monitor drukarka dysk Strumienie- predefined streams automatically opened when the program is started. stdinstandard input device stdoutstandard output devive stdprnstandard printer ………….. nasze własne (np. pliki). Strumienie wejściowe i wyjściowe Jerzy F. Kotowski

  10. Obsługa strumienia wyjściowego • Wprowadzanie do strumienia wyjściowego • czym(gdzie, jak, co); • int fprintf(FILE *stream, char *format [, arg,…]); fprintf(stdout,”Ala ma kota”);ºprintf(“Ala ma kota”); fprintf(stdprn,”Ala ma kota”); - wydruk na drukarkę FILE *f = fopen(“Ala.cpp”,”a”); fprintf(f,”Ala ma kota”); fclose(f); Tryby: r w a b t FILE *fopen(const char *filename, const char *mode); Jerzy F. Kotowski

  11. Obsługa strumienia wejściowego • Wczytywanie ze strumienia wyjściowego • czym(skąd, jak, co); • int fscanf(FILE *stream, char *format[, adress,…]); • fscanf(stdin,”%d”,&i);ºscanf(”%d”,&i); • Przykład: char ss[100]; FILE *f = fopen(“dane”,”rt”); fscanf(f,”%s”,ss); fclose(f); Jerzy F. Kotowski

  12. Kilka funkcji do odczytu ze strumieni a z klawiatury w szczególności • int getc(FILE *stream);gets one character from a stream • int getchar(void);gets character from stdin. It is line buffered. This means it will not return until you press ENTER. • int getch(void); int getche(void); (echo)gets character from console. It is line buffered. This means it will not return until you press ENTER. • int bioskey(int cmd);Keyboard interface Jerzy F. Kotowski

  13. Kilka przykładów • Program inf_12_3.cpp • tekst_z_klawiaturyczyta bufor klawiatury • Odczyt rozpoczyna naciśnięcie ENTER. • Pobieranie znaków kończy pobranie znaku ‘char c’ - 2 argument • W buforze może coś zostać • Program inf_12_4.cpp • GetKey - naciśnięte klawisze • Można przetestować samemu. • #define F1 15104 • #define Shift_F1 21504 • #define Ctrl_F1 24064 • #define Esc 27 • ………………………… • switch(p) • { • case F1: • ………………. • case Ctrl_F1: • ………………. • case Esc: Jerzy F. Kotowski

  14. Merry Christmas and a Happy New Year 2006 Jerzy F. Kotowski

More Related