gemis
Administrator
Dołączył: 08 Paź 2006
Posty: 271
Przeczytał: 0 tematów
Skąd: Knurów / TK
|
Wysłany: Sob 10:33, 02 Cze 2007 Temat postu: Moje notki.. moze sie przydac. |
|
|
PPK wyklad: 07-03-14 (Wskazniki)
Zmienna wskaznikowa - zawiera adres obszaru pamieci przy czym obszar ten moze byc interpretowany jako zmienna okreslonego typu.
Deklaracja zmiennych wskaznikowych:
char *wsk_zn;
(gwiazdka-wskaznik)
int *ws_l_cal;
char (*ws_tabl)[10];
Int **wsk_wsk;
Wskazniki umozliwiaja:
- zarzadzanie blokami pamieci, lancuchami, tablicami
- przekazywanie parametrow funkcji
- tworzenie i przetwarzanie dynamicznych struktur danych
Operatory:
- Priorytet operatorow - stanowi o kolejnosci wykonywania dzialan okreslonych
- wiazanie - sposób laczenia operatora z operandem
- operator unarny ( jednoargumentowy) jest wiazany tylko z jednym operandem
- operator binarny (dwuargumentowy) jest wiazany z dwoma operandami
Int a=1, b=2 , c[5]={4,7,6,8,9}, i, s
Int *ws,*wp //ws i wp wskazniki dla liczby calkowitej
Int *wl=&l , l=5 // wl wskazuje zmienna l
ws = &a ; // ws wskazuje adres zmiennej a
b = *ws ;
Printf("\tI\t%4d%4d%\n",a,b)
*wl = 1 ;
Printf("\t\tl=%d",l);
*wl=10 ;
Printf("\t\tl=%d\n\n",1);
ws=&c[0];
a=*ws
b=*(++ws); // inkrement wskaznika nie zmiennej
Printf("\tII\t%4d%4d\n",a,b);
ws=&c[0];wp=ws; //Sumowanie tablicy za pomoca wskaznikow
For (s=0,i=0;i<5;i++) ;
s+=*(ws+i) ;
PPK Alokacja/przydzial pamieci
Sizeof okresla liczbe bajtow wymaganych do przechowywania obiektu o typie wskazanym argumentem.
Sizeof obiekt
Sizeof (nazwa_typu)
Sizeof float 4,Double 8,char 1, int 4, tablica int[100][100] 40000, liczba el poprzedniej tablicy 10000(sizeof[0][0]) , liczba wierszy(sizeof t[0])
Wskaznik do zmiennej char 4, sam char 1.
Dystrybutor pamieci:
Wg dwoch algorytmow:
-pierwszej przymiarki - first fit - pierowszy wolny o wystarczajaco duzym rozmiarze.
-najlepszej przymiarki - best fit - najmniejszy wolny spelniajacy zadanie
Blok zwracany przez funkcje malloc:
[adres nast. Wolnego bloku | rozmiar | ]
Funckcja malloc nie inicjuje obszaru(inicjuje calloc).
Mozna zwalniac bloki w dowolnej kolejnosci.
Void *malloc(size _t n)
Pobiera od systemu zadane bloki pamieci i zwraca wskaznik do n bajtow nie zainicjowanej pamieci lub NULL jesli zadanie nie moze byc spelnione.
Dc = (char *)malloc(100);
If (!dc) {perror("blad aplikacji");
exit(EXIT_FAILURE)}
Kdc=dc
While ((*dc++ = *zr++) != '\0') ; //przepisywanie zmiennej lecz traci sie pierwszy znak, gdyz inkrementujemy petle
Free() - zwalnia obszar pamieci.
static int licznik lokalny - pamieta wartosc np.. W funkcji po wyjsciu z niej
Auto - tworzy automatycznie.
PPK Operacje na lancuchach
%s w printf
Include <string.h>
static char *name[] = ["blad danych","styczen","luty"]
Strcat(docel,s2) - dodaje s2 do docel
Strncat(docel,s2,n) - dodaje n znakow z s2 do docel
Strlen(s) - dlugosc lancucha s.
Petla przy odwracaniu lancuchow.
While(pocz<kon){
temp=*pocz;
*pocz++ = *kon;
*kon-- = temp ;}
PPK Struktury 07-04-25
Struktura - jest obiektem zlozonym z jednej lub kilku zmiennych( tego samego typu lub roznych typow) zgrupowanych pod jedna nazwa.
Struktury mozna:
-przypisywac jedna drugiej
-kopiowac
-przekazywac do funkcji
-zwracac jako wartosc funkcji
Definicja:
Struct <etykieta> {skladowe}
Struct point { int x; //skladowe struktury
int y; } p1,p2,p3; <= lista zmiennych z rezerwacja pamieci
Etykieta struktury - identyfikuje dany rodzaj struktury i moze byc uzywana jako skrot do tej czesci deklaracji ktora wystepuje w nawiasach klamrowych.
struct {...} x,y,z ;
Int x,y,z ;
struct point { int x;
int y; } ;
struct point pt;
struct point minpt={10,10};
Struktury zagniezdzone:
struct rect { struct point p1;
struct point p2; } ;
struct rect ekran;
Dostep do struktury:
Nazwa_struktury.skladowa //jak we flashu
Struct point pt ---- pt.x
Struct rect ekran ---- ekran.p1.x
Tablice struktur:
Struct tab {
char *nazwisko;
int ocena; }prot[]={"Nowak",2,"Nowakowski",3,"Kowal",4,"Reksio",5};
Przyklady:
Struct punkt {
int x ;
int y ; } ;
Struct kwadrat {
Struct punkt p1;
Struct punkt p2;}
Struktura zwracajaca strukture punkt:
Struct punkt utw_pkt (int x,int y) {
Struct punkt temp ;
temp.x=x; // nie ma konfliktu gdyz temp.x jest elementem struktury
temp.y=y ;
return temp }
}
a w mainie :
struct punkt pkt,pkt1,wektor,*pp;
Struct kwadrat kw = (50,50,20,20) ;
Pkt=utw_pkt(x,y) ;
// odleglosc miedzy punktami - przyklad odwolania do zmiennych z strukturach zagniezdzonych.
odl = sqrt((double)pkt.x*pkt.x + (double)pkt.y*pkt.y) ;
Struct punkt przesun(struct punkt p1, struct punkt p2)
{
p1.x+=p2.x;
p1.u+=p2.y;
return p1 ;
}
//przesun puntk o (a,b) ;
Wektor=utw_pkt(a,b) ;
Pkt1=przesun(pkt,wektor);
//dygresja : kanoniczna postac kwadratu : kwadrat okreslony jest przez dwa punkty: lewy dolny i prawy gorny.
Int wewn(struct kwadrat kw, struct punkt pk)
{
Return pk.x>=kw.p1.x && pk.y>=kw.p1.y && pk.x<=kw.p2.x && pk.y<=kw.p2.y ;
}
Struct kwadrat post_kanon(struct kwadrat kw)
{
struct kwadrat temp;
temp.p1.x=min(kw.p1.x,kw.p2.x);
temp.p1.y=min(kw.p1.y,kw.p2.y);
temp.p2.x=min(kw.p1.x,kw.p2.x);
temp.p2.y=min(kw.p1.y,kw.p2.y);
Return temp;
}
To na poczotku: #define min(a,b) (a<b ? a:b)
//czy punkt lezy wewnatrz kwadratu
kw=post_kanon(kw)
Flaga=wewn(kw,pkt1);
//Tablice struktur
For (i=0,il=0;i<DL)
if (prot[i++].ocena>=3) il++;
For(i=0;i<DL;i++)
printf("%s\t%d\n",(prot+i)->nazwisko,prot[i].ocena) ;
}
PPK wyklad 07-05-30
Instrukcje wejscia wyjscia
Standardowe we/wy
Int getchar(void)
Int putchar(int)
Wyjscia formatowane np. Printf,scanf
//minus - dosuniecie argumentu do lewego kranca pola
//plus - liczba zawsze ze znakiem
//liczba - okresla minimalny rozmiar pola
//0 - uzupelnienie nieznaczacymi zerami
//kropka - oddziela rozmiar od precyzji
//liczba - maksymalna liczba dla znakow
// liczba cyfr po kropce
// - minimalna liczba cyfr wartosci calkowitej
Printf(" .5s %.5s\n 10.5s: %10.5s\n-10.5s:%
#o: drukuje w postaci osemkowej
#x: zaspis szensastkowy
Formatowanie wejscia - funkcja scanf
Int scanf(char *format,arg1,arg2)
Arg1,arg2 - musza byc wskaznikami!!! Gdyz kompilator moze nie wykryc bledu.
Obsloga Plikow
FILE *fp; deklaracja zmiennej okreslajaca wskaznik do pliku
FILE *fopen(char *name,*char *mode); mode: r,w,a
Int fclose (FILE *fp);
Int fscanf(FILE *fp,char *format,arg1,arg2..);
Int fprint(FILE *fp,char *format,arg1,arg2..);
Int putc(int c, file *fp);
Int getc(FILE *fp);
|
|