У цьому посібнику ви навчитеся передавати адреси та покажчики як аргументи функціям за допомогою прикладів.
У програмуванні на С також можна передавати адреси як аргументи функціям.
Щоб прийняти ці адреси у визначенні функції, ми можемо використовувати покажчики. Це тому, що вказівники використовуються для зберігання адрес. Візьмемо приклад:
Приклад: Передати адреси функціям
#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.