Selles õpetuses õpite näidete abil edastama funktsioonidele argumentidena aadresse ja osutajaid.
C-programmeerimisel on funktsioonidele võimalik edastada ka aadresse argumentidena.
Nende aadresside aktsepteerimiseks funktsiooni määratluses võime kasutada näpunäiteid. Sellepärast, et aadresside salvestamiseks kasutatakse kursoreid. Võtame näite:
Näide: edastage funktsioonidele aadressid
#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; )
Programmi käivitamisel on väljund järgmine:
num1 = 10 num2 = 5
Num1 ja num2 aadress edastatakse swap()
funktsioonile kasutades swap(&num1, &num2);
.
Kursorid n1 ja n2 aktsepteerivad neid argumente funktsiooni määratluses.
void swap(int* n1, int* n2) (… )
Kui swap()
funktsiooni sees muudetakse * n1 ja * n2, muudetakse funktsiooni sees peamist () ka num1 ja num2.
swap()
Funktsiooni sees *n1
ja *n2
vahetatud. Seega vahetatakse ka num1 ja num2.
Pange tähele, et swap()
see ei tagasta midagi; selle tagasituleku tüüp on void
.
Näide 2: Näidikute edastamine funktsioonidele
#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; )
Siin on p-le salvestatud väärtus *p
esialgu 10.
Edastasime seejärel kursori p addOne()
funktsioonile. Ptr-kursor saab selle aadressi addOne()
funktsiooni.
Funktsiooni sees suurendasime ptr-le salvestatud väärtust 1 abil (*ptr)++;
. Kuna ptr-l ja p-osutil on mõlemal sama aadress, on *p
sees main()
ka 11.