Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

avr gcc wskaźnik do tablicy jako argument funkcji

23 Kwi 2009 22:12 4647 3
  • Poziom 10  
    Witam!

    Mam taki problem:

    mam taką zmienna:
    Code:
    unsigned char SectorG1[512];


    potrzebuję zrobić funkcję której argumentem będzie wskaźnik do mojej zmiennej. czyli coś w stylu:

    Code:
    unsigned char sd_writesector (unsigned char *sec[]) 
    
    {
     for(int i=0;i<512;i++)
    {
    *sec[i]=1;
    }
    }



    potem chce wywołać tą funkcję:

    Code:
    sd_writesector(&SectorG1);



    no i coś jest nie tak. kompiluje się, ale nie zapisuje tego co chce w zmiennej.

    Wiem, że pewnie to jakiś błachy błąd, nie za bardzo znam C.
    Proszę kolegów o pomoc.
    Z góry dziękuję!.
    mm.
  • Pomocny post
    Specjalista - Mikrokontrolery
    nazwa tablicy jest wskaźnikiem na jej pierwszy element.

    funkcje zadeklaruj jako ...(unsigned char* sec) i wywołuj ...(SectorG1). W funkcji odwołuj się normalnie - jak do zwykłej tablicy (sec[i]=...)

    4\/3!!
  • Poziom 10  
    więc:

    Code:

    unsigned char SectorG1[512];

    unsigned char sd_writesector (unsigned char *sec)
    {
     for(int i=0;i<512;i++)
       {
       sec[i]=1;
       }
    }

    sd_writesector(SectorG1);



    działa :)
    dziękuję i pozdrawiam!
  • Poziom 25  
    Jeszcze dodam że należy pilnować aby nie przekroczyć zakresu tablicy podanej w parametrze, bo skutki takiego czynu mogą być niemiłe.
    Dobrą praktyką jest zdeklarowanie stałej która przechowuje rozmiar tablicy, i tą stałą wykorzystujemy dla deklaracji tablicy oraz jako maksymalnej wartości indeksu np:
    Code:

    #define ROZMIAR_TABLICY 512

    void skanuj_tablice(unsigned char *dane){
       unsigned int i = 0;
       for(i = 0; i < ROZMIAR_TABLICY; i++){
          //to cos robimy z elementem tablicy
       }
    }

    void main(void){
       unsigned char tablica[ROZMIAR_TABLICY];
       //wypełniamy tablice
       //przetwazamy dane
       skanuj_tablice(tablica);
    }

    w takim przypadku mamy pewność że nie zapiszemy niczego poza tablica.