WSKA拍匩IKI


WSKAyNIKI
Wskaznik to zmienna (zwana zmienn膮 wskaznikow膮), kt贸ra zawiera adres
pierwszej kom贸rki pami臋ci, w kt贸rej przechowywana jest inna zmienna. Je艣li
zmienna zajmuje wi臋cej ni偶 jedn膮 kom贸rk臋 pami臋ci to wskaznik wskazuje na
pierwsz膮 z tych kom贸rek.
Dla ka偶dego wskaznika okre艣lany jest jego typ.
Wskaznik typu int wskazuje na zmienn膮 typu int. Dzi臋ki temu, kompilator wie ile
kom贸rek w pami臋ci zajmuje zmienna rozpoczynaj膮ca si臋 w kom贸rce, na kt贸r膮
wskazuje wskaznik.
WSKAyNIKI
WSKAyNIKI
Przyk艂ad 1
#include
voidmain() {
int a=5, b=2, c=7, *d;
printf("Napocz膮tku a=%d, b=%d, c=%d\n",a,b,c);
d=&a;
printf("Poprzekazaniu adresu a do d - d bez '*' wynosi %d\n",d);
printf("Poprzekazaniu adresu a do d - d z '*' wynosi %d\n",*d);
c=*d;
printf("Poprzekazaniu (wy艂uskaniu) warto艣ci d z c wynosi %d\n",c);
getch();
}
Przyk艂ad 2
#include
voidmain(){
int a=5, *b=2;
printf("Napoczatkua=%d, b=%d\n",a,b);
b=&a;
printf("Poprzekazaniu adresu a do b 'bez *' wynosi %d\n",b);
printf("Poprzekazaniu adresu a do b 'z *' wynosi %d\n",*b);
*b=*b+5;
printf("Po zwiekszeniu wartosci wskazywanego obiektu 'z *' %d\n",*b);
printf("Po zwiekszeniu wartosci obiekt a ma wartosc %d\n",a);
}
WSKAyNIKI
Na wskaznikach mo偶na wykonywa膰 operacje:
1  przypisania;
int *a,*b;
a=b; - w przypadku niezgodno艣ci typ贸w konieczne jest dokonanie konwersji typ贸w
2  por贸wnania;
a==b;
a3  arytmetyczne  operacje powi臋kszania lub pomniejszania wskaznika o liczb臋 ca艂kowit膮:
- powi臋kszanie (pomniejszenie) wskaznika o warto艣膰 N to wyznaczenie nowego
adresu przesuni臋tego o N * sizeof(typzmiennej) w stron臋 rosn膮cych (malej膮cych)
adres贸w.
- operacja odejmowania wskaznik贸w tego samego typu to wyznaczenie
 odleg艂o艣ci w bajtach pomi臋dzy dwoma adresami.
R贸wnowa偶ne s膮 zapisy:
int *ip;
*ip+=1; ++*ip; (*ip)++;
W trzecim przypadku niezb臋dne nawiasy, gdy偶 operacje okre艣lone przez
jednoargumentowe * i ++ s膮 wykonywane od prawej strony do lewej.
WSKAyNIKI
Przyk艂ad 3. Pokazanie r贸偶nicy pomi臋dzy arytmetyk膮 liczb i wskaznik贸w:
#include
main( )
{
int *ip, i=200;
ip=&i;
printf("Wskaznik: %p, liczba: %d \n", ip, i);
(*ip)++;
printf("Wskaznik: %p, liczba: %d \n", ip, i);
*ip++;
printf("Wskaznik: %p, liczba: %d \n", ip, i);
getch();
return 0;
}
WSKAyNIKI
WSKAyNIKI
" W poni偶szym programie przedstawiono klasyczn膮 i wskaznikow膮 referencj臋 do
element贸w tablicy tab:
 #include
main( )
{
int a[5] = {10, 20, 30, 40, 50};
int *p;
p = a; /*przypisanie pocz膮tku tablicy - DLA WSKAyNIK脫W
DO TABLIC NIE U呕YWAMY AMPERSANDA & !!!*/
/*zwyk艂e indeksowanie element贸w tablicy*/
printf( %d%d %d %d %d , a[0], a[1], a[2], a[3], a[4]);
tutaj dzia艂a
arytmetyka
/*dost臋p do element贸w tablicy poprzez wskaznik*/
wskaznik贸w
printf( %d%d %d %d %d , *p, *(p+1), *(p+2), *(p+3), *(p+4));
return 0;
}
FUNKCJE
Przeanalizujmy dzia艂anie takiej funkcji: Drugi przypadek
void funkcja(int a) { int funkcja(int a) {
a += 2; a += 2;
} return a;}
Przeanalizujmy taki fragment programu: Teraz wywo艂anie:
int a=8; int a=8;
printf("Przed: %d\n", a); printf("Przed: %d\n", a);
funkcja(a); a= funkcja(a);
printf("Po: %d\n", a); printf("Po: %d\n", a);
Jaki b臋dzie wynik tego kodu: da wynik:
Przed: ? Przed: ?
Po: ? Po: ?
Przekazywanie parametr贸w funkcjom odbywa si臋 przez warto艣膰.
Oznacza to, 偶e nie jest przekazywana sama zmienna, ale tylko jej zawarto艣膰.
FUNKCJE
Przyk艂ad prostej funkcji:
void razytrzy(int a, int b) {
if(a > b) a *= 3;
elseif (b > a) b *= 3;
else{ a += 1; b -= 1;}
}
Jak zwr贸ci膰 obie warto艣ci?
Korzystaj膮c z instrukcji return mo偶na zwr贸ci膰 z funkcji tylko jedn膮 warto艣膰, a
wtedy nie b臋dzie wiadomo, kt贸ra warto艣膰 by艂a wi臋ksza i zosta艂a zmodyfikowana.
A co w sytuacji, gdy warto艣ci s膮 r贸wne.
Wtedy obie warto艣ci by艂y modyfikowane, a zwr贸cona mo偶e by膰 jedna.
W takim przypadku z pomoc膮 przychodz膮 w艂a艣nie wskazniki.
FUNKCJE
Przekazuj膮c wskaznik do funkcji przekazujemy tylko sam adres.
void razytrzy(int *a, int *b) {
if(*a > *b)
*a *= 3;
else
if (*b > *a)
*b *= 3;
else {
*a += 1; *b -= 1;}
}
main() {
int x=8, y=23;
int *px, *py;
px = &x, py = &y;
razytrzy(px, py); //przekazanie zawarto艣ci wskaznik贸w
razytrzy(&x, &y); //przekazanie adres贸w zmiennych
WSKAyNIKI
1. Dokonaj inicjalizacji tablicy int tab[100] w taki spos贸b, aby elementy
tablicy zawiera艂y losowe warto艣ci w przedziale [0,30]. Do poruszania si臋
po tablicy wykorzystaj wskazniki. (skorzystaj z funkcji rand() z biblioteki
).
2. W programie z pkt. 1 napisz funkcj臋 przeszukuj膮c膮 tablic臋 i zwracaj膮c膮
jej element maksymalny i minimalny.


Wyszukiwarka

Podobne podstrony:
et wskazniki empiryczne
1 Wska藕niki techniczno ekonomiczne wiercenia otworuid049
C w6 zmienne dynamiczne wskazniki funkcji
wskaznik skomunikowania
wska藕niki zamiana miejsc
Ptaki jako wska藕nik r贸偶norodno艣ci biologicznej
Miniaturowy wskaznik wlaczonych swiatel
Obliczanie wska藕nika plastyczno艣ci przy skr臋caniu
Wska藕niki
wska藕nik ci艣nienie oleju Nyroc s ATV info website
Informator p艂acowy Wska藕niki i stawki aktualne od 1 marca 2015 r ebook demo
wskazniki
Dodawanie wskaznikow
cw 7 badanie wskaznik tlenowy dsz

wi臋cej podobnych podstron