Tablica wskaźników do funkcji

0

Mam za zadanie stworzyć tablicę, której elementami będą funkcję. Wygooglowałem, że muszę skorzystać z wskaźników do funkcji.
A więc stworzyłem coś takiego:

int funkcja1();
int main(void)
{
    int tab[3];

    int (*wskfc1)();
    wskfunkcja1=&funkcja1;
    tab[0]=wskfunkcja1;
    
    return 0;
}
 

Definicji funkcji nie pisałem bo nie ma chyba ona tutaj większego znaczenia. Problem jest taki, że w momencie przypisania do zerowego elementu tablicy adresu funkcji, kompilator krzyczy o niezgodności typów. Z tego co mi wiadomo adres przechowywany jest jako liczba całkowita. Jaki popełniam błąd? Czy jest jakieś lepsze rozwiązanie mojego problemu?

2

Masz tablicę intów, nie tablicę wskaźników na funkcję. Tablica wskaźników na funkcję przyjmującą 0 argumentów i zwracającą int to taki okropny typ:

int (*tab[])();
3

Tak jak wyżej lub trochę bardziej łopatologicznie:

typedef int TablicowanaFunkcja();
TablicowanaFunkcja *tab[3];
0

Pierwsze rozwiązanie rozumiem, bo to się bierze z wskaźnika do funkcji. Wskaźnik do funkcji: typ (*nazwa zmiennej)(argumenty). W naszym przypadku zamiast zmiennej przechowującej adres do funkcji będzie tablica przechowująca adresy do funkcji.
W drugim przypadku tworzymy nowy typ i tutaj mam mały problem, bo zawsze spotykałem się jedynie ze zmianą "nazwy typu" a tutaj typowi int przyporządkowuje funkcję, nie bardzo rozumiem dlaczego tak jest. No i szczerze mówiąc mam problem z przypisaniem adresu funkcji do tej tablicy. Próbuję zrobić coś takiego *tab[0]=&funkcja;

0

Pierwsze rozwiązanie rozumiem, bo to się bierze z wskaźnika do funkcji. Wskaźnik do funkcji: typ (*nazwa zmiennej)(argumenty). W naszym przypadku zamiast zmiennej przechowującej adres do funkcji będzie tablica przechowująca adresy do funkcji.
W drugim przypadku tworzymy nowy typ i tutaj mam mały problem, bo zawsze spotykałem się jedynie ze zmianą "nazwy typu" a tutaj typowi int przyporządkowuje funkcję, nie bardzo rozumiem dlaczego tak jest. No i szczerze mówiąc mam problem z przypisaniem adresu funkcji do tej tablicy. Próbuję zrobić coś takiego *tab[0]=&funkcja;

0

Pierwsze rozwiązanie rozumiem, bo to się bierze z wskaźnika do funkcji. Wskaźnik do funkcji: typ (*nazwa zmiennej)(argumenty). W naszym przypadku zamiast zmiennej przechowującej adres do funkcji będzie tablica przechowująca adresy do funkcji.
W drugim przypadku tworzymy nowy typ i tutaj mam mały problem, bo zawsze spotykałem się jedynie ze zmianą "nazwy typu" a tutaj typowi int przyporządkowuje funkcję, nie bardzo rozumiem dlaczego tak jest. No i szczerze mówiąc mam problem z przypisaniem adresu funkcji do tej tablicy. Próbuję zrobić coś takiego *tab[0]=&funkcja;

1

Wystarczy raz napisać ;)

int f();

//...

typedef int TablicowanaFunkcja();
TablicowanaFunkcja *tab[3];

tab[0] = &f;

0

Pierwsze rozwiązanie rozumiem, bo to się bierze z wskaźnika do funkcji. Wskaźnik do funkcji: typ (*nazwa zmiennej)(argumenty). W naszym przypadku zamiast zmiennej przechowującej adres do funkcji będzie tablica przechowująca adresy do funkcji.
W drugim przypadku tworzymy nowy typ i tutaj mam mały problem, bo zawsze spotykałem się jedynie ze zmianą "nazwy typu" a tutaj typowi int przyporządkowuje funkcję, nie bardzo rozumiem dlaczego tak jest. No i szczerze mówiąc mam problem z przypisaniem adresu funkcji do tej tablicy. Próbuję zrobić coś takiego *tab[0]=&funkcja;

0

Jakiś błąd był ze strony serwera i nie wiem dlaczego tyle razy napisało post, proszę moderatora o usunięcie zbędnych postów ;p

0

Już wiem jaki błąd robiłem, nad deklaracjami tablicy wskaźników, była jeszcze deklaracja zwykłej tablicy int tab[3] i najwidoczniej kompilator myślał, że do tej tablicy chcę przypisać adres, dziękuję za wszystkie odpowiedzi problem rozwiązany :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1