#include main() { /* Varataan muistista tilaa taulukolle int-tyyppisiä muuttujia. * Taulukon alkiot ovat peräkkäisillä muistipaikoilla. */ int t[3]={1,2,5}; int n=4; int *p; /* Pointteri int-tyyppiseen dataan. */ p=&n; /* Annetaan p:lle arvoksi muuttujan n muistipaikan osoite. */ /* Lauseke *p antaa sen muistipaikan sisällön, johon p osoittaa, * eli tässä tapauksessa muuttujan n arvon. */ printf("Are %i and %i equal?\n",*p,n); /* Koska p osoittaa n:ään, *p on siis n:n arvo. */ printf("Yes they are.\n"); /* Taulukon nimi on sen ensimmäisen alkion muistipaikan osoite. * Pointteri p osoittaa siis muuttujaan t[0]. */ p=t; /* Tulostetaan t[0] ja sen osoite. */ printf("\n%i is stored at %#x.\n",*p,p); /* Pointtereiden laskutoimituksissa yksikkö vastaa annetun muuttujan * viemää tilaa. Nyt p osoittaa muuttujaan t[1]. */ p++; printf("What's stored at %#x?\n",p); /* Vastaus on siis t[1]:n arvo. */ printf("Your answer: 2\n"); /* Tarkistetaan arvaus: */ printf("Correct answer: %i.\n",*p); printf("\n"); t[0]=n-t[2]; /* Laskutoimitus tavallisilla int-muuttujilla. t[0] on nyt -1 */ p=&t[2]-2; /* p osoittaa muistipaikkaan, joka on kahden int-tyyppisen * muuttujan viemän tilan verran ennen muuttujan t[2] muistipaikkaa. * Siis p osoittaa muuttujaan t[0]. */ /* Kerrotaan p:n osoittaman muistipaikan sisältö kakkosella. * Tämän jälkeen siis t[0] saa arvon -2. */ *p *= 2; printf("What's stored at p now?\n"); printf("Your answer: -2\n"); printf("Correct answer: %i\n",*p); printf("\n"); }