====== Wskaźniki ======
Program demonstrujący użycie wskaźników
#include
int main()
{
int x = 100;
char napis[] = "jezyki programowania\n";
int tab[5] = {100, 101, 102, 103, 104};
int *wsk1, *wsk2; // tworzymy wskaznik (do) typu int
char* wsk3;
wsk1 = &x; // przypisanie wartosci (adresu)
printf("wsk1=&x | x=%d *wsk1=%d\n",x,*wsk1);
printf("adres x | &x=%x, wsk1=%x\n",&x,wsk1);
*wsk1 = 5;
printf("*wsk1=5 | x=%d *wsk1=%d\n",x,*wsk1);
printf("tymczasem *wsk2=%d\n",*wsk2);
wsk2 = wsk1;
printf("wsk2=wsk1 | *wsk2=%d\n",*wsk2);
x++;
printf("x++ | *wsk1=%d, *wsk2=%d, x=%d\n",*wsk1,*wsk2,x);
(*wsk1)++;
printf("(*wsk1)++ | *wsk1=%d, *wsk2=%d, x=%d\n",*wsk1,*wsk2,x);
wsk1 = tab; // to samo co wsk1 = &tab[0]
printf("teraz wsk1 pokazuje na elementy tablicy\nwsk1=tab | *wsk1=%d, *wsk2=%d, x=%d\n",*wsk1,*wsk2,x);
wsk1 = wsk1 + 2;
printf("wsk1=wsk1+2 | *wsk1=%d,",*wsk1);
printf(" tab[2]=%d, *(tab+2)=%d\n",tab[2],*(tab+2));
wsk3 = napis + 4;
printf(wsk3);
return 0;
}
**Ćwiczenia**
* przerób poniższy program tak aby do manipulowania elementami tablicy wykorzystywał wskaźniki zamiast zmiennej indeksującej ''**i**''. Program wykorzystuje pliki z poprzednich zajęć {{zajecia:jpr_2013_1:src:tab1:tab.c}} i {{{zajecia:jpr_2013_1:src:tab1:tab.h}} (z poprzednich zajęć)
#include
#include "tablice.h"
#define MAX 100
int main()
{
int n,i;
float tablica[MAX];
float t;
printf("Ile elementow (nie wiecej niz MAX)");
scanf("%d",&n);
wczytaj(tablica,n);
i = 0;
while(i
**Ćwiczenie**
* napisz funkcję o nazwie ''**zamien**'', która zamienia wartości dwóch podanych argumentów typu rzeczywistego
* dodaj do plików ''**tab.h**'' i ''**tab.c**'' funkcję ''**odwroc**'', która odwraca kolejność elementów w tablicy (tak jak w przykładzie powyżej). Wykorzystaj w tym celu funkcję ''**zamien**''. Niech funkcja zwraca wskaźnik do odwróconej tablicy.
===== Wskaźnik jako argumet funkcji =====
#include
#include "tab.h"
#define MAX 100
void zwieksz(float *x);
float *zwieksztab(float *tab,int n);
int main()
{
int n,i;
float t,tablica[MAX];
printf("Liczbe: "); scanf("%f",&t);
zwieksz(&t);
zwieksz(&t);
zwieksz(&t);
printf("Teraz liczba wynosi %f\n",t);
printf("Podaj rozmiar tablicy: "); scanf("%d",&n);
wczytaj(tablica,n);
zwieksztab(zwieksztab(zwieksztab(tablica,n),n),n);
printf("Teraz tablica wyglada tak\n");
wyswietl(tablica,n);
}
void zwieksz(float *liczba)
{
*liczba = *liczba + 1.0;
}
float *zwieksztab(float *tab,int n)
{
float *wt = tab+n;
while(wt>tab) zwieksz(--wt);
return tab;
}
===== Zadania domowe =====
* we wszystkich funkcjach z zajęć dotyczących tablicy liczb rzeczywistych (wczytaj, wyswietl, srednia itd.) wprowadź wskaźniki zamiast indeksowania tablic zmienną całkowitą
* zmień funkcję ''**pierwiastki**'' (patrz zajęcia 3) tak aby wartością zwracaną była ilość pierwiastków równania kwadratowego oraz wartości tych pierwiastków.