• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Problem z tablicami,

0 głosów
455 wizyt
pytanie zadane 15 maja 2017 w C i C++ przez naryans Nowicjusz (140 p.)
zamknięte 22 maja 2017 przez naryans
Witam,

Mam pewien problem z wskaźnikami i tablicami do funkcji, oraz wywołaniem funkcji poprzez element tablicy wskaźników.

W moim rozumowaniu wskaźnik do funkcji posłać można, i wydawało mi się, że tak samo jest z wysłaniem tablicy wskaźników do funkcji. ( Tworzę dynamiczną tablicę i wysyłam ją do funkcji w ten sposób: func(*tab) ). Czy mylę się w tej kwestii?

I czy jest możliwość wysłania tablicy do funkcji (jak nie to dlaczego?)

Jeśli chodzi o " wywołanie funkcji poprzez element tablicy wskaźników " rozumiem to przykładowo w ten sposób: (*tab + 1) = func(x), czy chodzi o coś zupełnie innego?
komentarz zamknięcia: Uzyskałem odpowiedź.

1 odpowiedź

+1 głos
odpowiedź 15 maja 2017 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Twoje pytanie jest trochę zagmatwane i nie jestem pewien, czy dobrze je zrozumiałem. Czy chcesz przekazać do funkcji tablicę wskaźników na jakieś funkcje? Jeżeli tak, to załączam przykładowy kod:
 

#include <iostream>

void funkcjaMatka( void (**p)(), int N ) // ta funkcja wywola N funkcji z przekazanej tablicy
{
    for(int i = 0; i < N; i++)
    {
        (p[i])(); // wywolanie funkcji o i-tym indeksie
    }
}

void funkcjaPierwsza()
{
    std::cout << "Wywolanie funkcji pierwszej!\n";
}

void funkcjaDruga()
{
    std::cout << "Wywolanie funkcji drugiej!\n";
}


int main()
{
    void (*tablicaWskaznikow[2])() = {funkcjaPierwsza, funkcjaDruga}; // tworzymy dwuelementowa tablice wskaznikow na funkcje
    funkcjaMatka(tablicaWskaznikow, 2); // wywolujemy nasza "funkcje matke"
}

 

komentarz 15 maja 2017 przez naryans Nowicjusz (140 p.)

Hmm, rozumiem ten przykład (jak działa), lecz nie wiem czy do końca zrozumiałem zadanie, które mam do zrobienia.

Cytując: "wskaźniki i tablice wskaźników do funkcji oraz wywołanie funkcji poprzez element tablicy wskaźników ".

Wskaźnik do funkcji (oraz jak w twoim tablica wskaznikow) : rozumiem jako np:

int (*Wsk)(); 

// w twoim przykladzie - void(*tablicaWskaznikow[2])() = .....

Czy dobrze myślę?

I jeszcze jeśli chodzi o wywołanie funkcji POPRZEZ element tablicy.

//deklaruje tablice np dynamicznie
( * tab +1 ) = func(); //wywolanie tej funkcji poprzez element tablicy

Ja widzę to tak jak wyżej, ale podobno moje myślenie jest błędne.

 

 

1
komentarz 16 maja 2017 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

int (*Wsk)(); to deklaracja wskaźnika o nazwie Wsk, który służy do pokazywania na funkcje wywoływane bez żadnych parametrów i zwracające typ void (i tylko do pokazywania na funkcje o takich prototypach, do funkcji przyjmującej jakieś argumenty, albo zwracającej inny typ potrzebowałbyś innego wskaźnika). A więc, jeżeli chciałbyś zadeklarować sobie wskaźnik pokazujący na dynamicznie alokowaną tablicę takich wskaźników, to wystarczy do nazwy dodać gwiazdkę 

int (**Wsk)();

i zaalokować dynamicznie pamięć przy pomocy operatora new, a następnie przypisać do tych wskaźników odpowiednie funkcje (nazwa funkcji jest również jej adresem). Możemy też zadeklarować statyczną tablicę takich wskaźników (tak jak zrobiłem to ja w funkcji main).

 

Jeżeli chodzi o wywoływanie funkcji przy użyciu wskaźnika, to na pewno poprawną wygodne i poprawne będzie odwołanie się do chcianego indeksu tablicy przy użyciu kwadratowych nawiasów. Weźmy wspomnianą statyczną tablicę wskaźników na funkcje (tę z przykładu). Chcemy odwołać się do funkcji, na którą wskazuje drugi element tablicy tablicaWskaznikow. Aby to zrobić korzystamy ze wspomnianego operatora indeksowania:

tablicaWskaznikow[1]

czyli już mamy funkcję, na którą wskazuje drugi element naszej tablicy wskaźników. Teraz wystarczy wywołać tę funkcję przy użyciu okrągłych nawiasów:

tablicaWskaznikow[1]();

co powinno wywołać drugą funkcję z przykładu. Analogicznie wyglądałoby wywołanie funkcji, jeżeli użyłbyś tablicy dynamicznie alokowanej.

Podobne pytania

0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 15 kwietnia 2019 w C i C++ przez wz7475 Początkujący (360 p.)
0 głosów
3 odpowiedzi 1,223 wizyt
pytanie zadane 20 lutego 2018 w C i C++ przez KacperO Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 179 wizyt
pytanie zadane 16 października 2020 w C i C++ przez Kucharek Nowicjusz (150 p.)

93,632 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...