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

question-closed Problem z tablicami,

Object Storage Arubacloud
0 głosów
247 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ź 155 wizyt
pytanie zadane 15 kwietnia 2019 w C i C++ przez wz7475 Początkujący (360 p.)
0 głosów
3 odpowiedzi 662 wizyt
pytanie zadane 20 lutego 2018 w C i C++ przez KacperO Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 82 wizyt
pytanie zadane 16 października 2020 w C i C++ przez Kucharek Nowicjusz (150 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...