Tässä opetusohjelmassa opit välittämään osoitteet ja osoittimet funktioiden argumenteiksi esimerkkien avulla.
C-ohjelmoinnissa on myös mahdollista välittää osoitteet argumentteina funktioille.
Hyväksyäksemme nämä osoitteet funktion määrittelyssä, voimme käyttää osoittimia. Se johtuu siitä, että osoittimia käytetään osoitteiden tallentamiseen. Otetaan esimerkki:
Esimerkki: Osoitteiden välittäminen toiminnoille
#include void swap(int *n1, int *n2); int main() ( int num1 = 5, num2 = 10; // address of num1 and num2 is passed swap( &num1, &num2); printf("num1 = %d", num1); printf("num2 = %d", num2); return 0; ) void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )
Kun suoritat ohjelmaa, tulos on:
num1 = 10 num2 = 5
Num1- ja num2-osoitteet välitetään swap()
funktiolle käyttämällä swap(&num1, &num2);
.
Osoittimet n1 ja n2 hyväksyvät nämä argumentit funktion määrittelyssä.
void swap(int* n1, int* n2) (… )
Kun * n1 ja * n2 vaihdetaan swap()
toiminnon sisällä, myös pää () -funktion sisällä olevat num1 ja num2 muuttuvat.
swap()
Toiminnon sisällä *n1
ja *n2
vaihdettu. Siksi myös num1 ja num2 vaihdetaan.
Huomaa, että swap()
se ei palauta mitään; sen palautustyyppi on void
.
Esimerkki 2: Osoittimien välittäminen toiminnoille
#include void addOne(int* ptr) ( (*ptr)++; // adding 1 to *ptr ) int main() ( int* p, i = 10; p = &i; addOne(p); printf("%d", *p); // 11 return 0; )
Tässä p: lle tallennettu arvo *p
on aluksi 10.
Sitten siirrimme osoittimen p addOne()
funktioon. Ptr-osoitin saa tämän osoitteen addOne()
funktioon.
Funktion sisällä lisäsimme ptr: ään tallennettua arvoa yhdellä käyttämällä (*ptr)++;
. Koska ptr: llä ja p-osoittimella on sama osoite, *p
sisällä main()
on myös 11.