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