C Edastage funktsioonidele aadressid ja osutajad

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 *n1ja *n2vahetatud. 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 *pesialgu 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 *psees main()ka 11.

Huvitavad Artiklid...