W tym samouczku za pomocą przykładów nauczysz się przekazywać adresy i wskaźniki jako argumenty do funkcji.
W programowaniu w C możliwe jest również przekazywanie adresów jako argumentów do funkcji.
Aby zaakceptować te adresy w definicji funkcji, możemy użyć wskaźników. To dlatego, że do przechowywania adresów używane są wskaźniki. Weźmy przykład:
Przykład: Przekaż adresy do funkcji
#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; )
Po uruchomieniu programu wynik będzie następujący:
num1 = 10 num2 = 5
Adresy num1 i num2 są przekazywane do swap()
funkcji za pomocą swap(&num1, &num2);
.
Wskaźniki n1 i n2 akceptują te argumenty w definicji funkcji.
void swap(int* n1, int* n2) (… )
Kiedy * n1 i * n2 są zmieniane wewnątrz swap()
funkcji, zmienia się także num1 i num2 wewnątrz funkcji main ().
Wewnątrz swap()
funkcji *n1
i *n2
zamienione. Dlatego też num1 i num2 są również zamieniane.
Zauważ, że swap()
nic nie zwraca; jego typ zwrotu to void
.
Przykład 2: przekazywanie wskaźników do funkcji
#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; )
Tutaj wartość przechowywana w p *p
wynosi początkowo 10.
Następnie przekazaliśmy wskaźnik p do addOne()
funkcji. Wskaźnik ptr pobiera ten adres w addOne()
funkcji.
Wewnątrz funkcji zwiększyliśmy wartość przechowywaną w ptr o 1 za pomocą (*ptr)++;
. Ponieważ wskaźniki ptr i p mają ten sam adres, *p
wewnątrz main()
również jest 11.