[Wskaźniki] przekazywanie adresu zmiennej do funkcji

W tym miejscu zadajemy pytania na temat języka C, dzielimy się swoją wiedzą, udzielamy wsparcia, rozwiązujemy problemy programistyczne.
StaryAnoda

[Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: StaryAnoda » czwartek 22 wrz 2016, 11:46

Cześć !

Panowie mam funkcję której argumentem jest wskaźnik. Rozumiem, że nie mam problemu czy będę ją wywoływał przy użyciu operatora pobierania adresu & czy bezpośrednio podając nazwę zmiennej ?

Dodaję dwa przykłady:

Przykład 1:

Kod: Zaznacz cały

#include <stdio.h>

void Dodaj (int *a);

int main (void)
{
   int a = 5;
   printf("%d\n", a);
   Dodaj(&a);
   printf("%d\n", a);
}

void Dodaj (int *a)
{
   *a *= 2;
   printf("%d\n", *a);   
}


Przykład 2:

Kod: Zaznacz cały

#include <stdio.h>

void Dodaj (unsigned char *Tablica);

int main (void)
{
unsigned char Bufor [4];
Bufor [0] = 0;
Bufor [1] = 1;
Bufor [2] = 2;
Bufor [3] = 3;
   
   for(unsigned char i = 0; i < 4; i++)
   {
      printf("%d\n", Bufor[i]);
   }
   
   Dodaj(Bufor);
   
   for(unsigned char i = 0; i < 4; i++)
   {
      printf("%d\n", Bufor[i]);      
   }
}

void Dodaj (unsigned char *Tablica)
{
   unsigned char len = 4;
   while(len)
   {
   *Tablica++ *= 10;
   len--;
   }
}
Ostatnio zmieniony czwartek 22 wrz 2016, 12:46 przez StaryAnoda, łącznie zmieniany 1 raz.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: Antystatyczny » czwartek 22 wrz 2016, 11:52

Oba przykłady są syntaktycznie poprawne. Do przykładu drugiego warto dodać drugi argument funkcji określający rozmiar przekazywanej tablicy.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

StaryAnoda

Re: [Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: StaryAnoda » czwartek 22 wrz 2016, 11:55

Ok dziękuję za informację, a z tym drugim argumentem to masz rację, jednak chciałem tylko pokazać na przykładach o co mi chodzi :)

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: Antystatyczny » czwartek 22 wrz 2016, 12:01

Dodam jeszcze, że w drugim przykładzie możesz wywołać funkcję Dodaj() na dwa sposoby:


Kod: Zaznacz cały

/* Sposób pierwszy: niejawne wskazanie adresu zerowego elementu tablicy */
Dodaj(Bufor);

/* Sposób drugi: jawne wskazanie adresu zerowego elementu tablicy */
Dodaj(&Bufor[0]);



Oczywiście w drugim sposobie możemy wskazać dowolny element tablicy. Nie musi to być zerowy element.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

StaryAnoda

Re: [Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: StaryAnoda » czwartek 22 wrz 2016, 12:03

A tego nie wiedziałem, czyli jeżeli argumentem będzie (&Bufor[1]), to adres będzie automatycznie ustawiony na drugi element ?

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: Antystatyczny » czwartek 22 wrz 2016, 12:05

Tak, w takim przypadku do funkcji zostanie adres pierwszego elementu tablicy. Pierwszego, ponieważ numeracja elementów rozpoczyna się od zera.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

StaryAnoda

Re: [Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: StaryAnoda » czwartek 22 wrz 2016, 12:06

No okej wszystko rozumiem dzięki

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [Wskaźniki] przekazywanie adresu zmiennej do funkcji

Postautor: Antystatyczny » czwartek 22 wrz 2016, 12:07

Drobiazg.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „Pisanie programów w C”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości