Strona 1 z 1

[Wskaźniki] przekazywanie adresu zmiennej do funkcji

: czwartek 22 wrz 2016, 11:46
autor: StaryAnoda
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--;
   }
}

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

: czwartek 22 wrz 2016, 11:52
autor: Antystatyczny
Oba przykłady są syntaktycznie poprawne. Do przykładu drugiego warto dodać drugi argument funkcji określający rozmiar przekazywanej tablicy.

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

: czwartek 22 wrz 2016, 11:55
autor: StaryAnoda
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 :)

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

: czwartek 22 wrz 2016, 12:01
autor: Antystatyczny
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.

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

: czwartek 22 wrz 2016, 12:03
autor: StaryAnoda
A tego nie wiedziałem, czyli jeżeli argumentem będzie (&Bufor[1]), to adres będzie automatycznie ustawiony na drugi element ?

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

: czwartek 22 wrz 2016, 12:05
autor: Antystatyczny
Tak, w takim przypadku do funkcji zostanie adres pierwszego elementu tablicy. Pierwszego, ponieważ numeracja elementów rozpoczyna się od zera.

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

: czwartek 22 wrz 2016, 12:06
autor: StaryAnoda
No okej wszystko rozumiem dzięki

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

: czwartek 22 wrz 2016, 12:07
autor: Antystatyczny
Drobiazg.