V tej vadnici se boste s pomočjo primerov naučili predajati naslove in kazalce kot argumente funkcijam.
Pri programiranju na C je mogoče funkcije tudi predati naslove kot argumente.
Za sprejem teh naslovov v definiciji funkcije lahko uporabimo kazalce. To je zato, ker se kazalci uporabljajo za shranjevanje naslovov. Vzemimo primer:
Primer: Prenos naslovov v funkcije
#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; )
Ko zaženete program, bo rezultat:
num1 = 10 num2 = 5
Naslov num1 in num2 se posredujeta swap()
funkciji z uporabo swap(&num1, &num2);
.
Kazalca n1 in n2 sprejmeta te argumente v definiciji funkcije.
void swap(int* n1, int* n2) (… )
Ko se v swap()
funkciji spremenita * n1 in * n2, se spremenita tudi num1 in num2 znotraj glavne () funkcije.
Znotraj swap()
funkcije *n1
in *n2
zamenjana. Zato se zamenjata tudi num1 in num2.
Obvestilo, da swap()
nič ne vrne; njegova vrnjena vrsta je void
.
Primer 2: Prenos kazalcev na funkcije
#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; )
Tu je vrednost, shranjena pri p,, na *p
začetku 10.
Nato smo kazalcu p poslali addOne()
funkcijo. Kazalec ptr dobi ta naslov v addOne()
funkciji.
Znotraj funkcije smo z vrednostjo shranili vrednost ptr za 1 (*ptr)++;
. Ker imata kazalca ptr in p enak naslov, je *p
znotraj main()
tudi 11.