C Siirrä osoitteet ja osoittimet toiminnoille

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ä *n1ja *n2vaihdettu. 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 *pon 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, *psisällä main()on myös 11.

Mielenkiintoisia artikkeleita...