У овом упутству научићете да прослеђујете адресе и показиваче као аргументе функцијама уз помоћ примера.
У програмирању на Ц, такође је могуће функције проследити као аргументе.
Да бисмо прихватили ове адресе у дефиницији функције, можемо користити показиваче. То је зато што се показивачи користе за чување адреса. Узмимо пример:
Пример: Прослеђивање адреса функцијама
#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; )
Када покренете програм, излаз ће бити:
нум1 = 10 нум2 = 5
Адреса нум1 и нум2 се прослеђују swap()
функцији помоћу swap(&num1, &num2);
.
Показивачи н1 и н2 прихватају ове аргументе у дефиницији функције.
void swap(int* n1, int* n2) (… )
Када се * н1 и * н2 промене унутар swap()
функције, нум1 и нум2 унутар главне () функције се такође мењају.
Унутар swap()
функције *n1
и *n2
замењен. Стога се нум1 и нум2 такође замењују.
Приметите да swap()
ништа не враћа; његов повратни тип је void
.
Пример 2: Преношење показивача на функције
#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; )
Овде је вредност смештена на п, у *p
почетку 10.
Затим смо проследили показивач п addOne()
функцији. Показивач птр добија ову адресу у addOne()
функцији.
Унутар функције повећали смо вредност сачувану у птр за 1 помоћу (*ptr)++;
. С обзиром да оба показивача птр и п имају исту адресу, *p
унутра main()
је такође 11.