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

Wskaźnik funkcji

Object Storage Arubacloud
0 głosów
146 wizyt
pytanie zadane 17 lutego 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Wskaźnik funkcji ma być parametrem innej funkcji i być w niej wywoływany. Problem jest dość obszerny, ponieważ nie wiem w jaki sposób to zadeklarować poprawnie, jak również nie rozumiem działania wskaźników funkcji w parametrach.

#include <iostream>

double * add(double x, double y);
double *calculate(double p, double m, double (*add)(double, double));

int main()
{
        double l, k;
        for(int i=0; i < 3; i++)
        {
                std::cout << "Podaj wartosc 1: ";
                std::cin >> l;
                std::cout << "Podaj wartosc 2: ";
                std::cin >> k;

                double * q = calculate(l, k, *add);
                std::cout << "Wartosc: " << q << "\nAdres: " << &q << std::endl;
        }
        return 0;
}

double * add(double x, double y)
{
        return x + y;
}

double *calculate(double p, double m, double (*add)(double, double))
{
        double *(*pf)(double, double) = * add(p, m);

        return * pf;
}

Wprowadzałem różne modyfikacje w programie i przyznaje się że nie wiem gdzie powinny znajdować się znaki wyłuskania.

1 odpowiedź

+2 głosów
odpowiedź 17 lutego 2018 przez obl Maniak (51,280 p.)
wybrane 17 lutego 2018 przez Sic
 
Najlepsza

Nie tak:

double *calculate(double p, double m, double (*add)(double, double));

a tak:

double *calculate(double p, double m, double* (*add)(double, double));

Poza tym tutaj masz błąd:

double * add(double x, double y)
{
        return x + y; // odejmujesz dwie liczby typu double, których wynikiem jest zmienna typu double, a funkcja ma zwracać wskaźnik na double
}

Generalnie masz duże problemy z zrozumieniem wskaźników. Zacznij od prostszych rzeczy z nimi związanych. Twój kod zmodyfikowałem i wygląda tak:

#include <iostream>
 
double add(double x, double y);
double calculate(double p, double m, double (*foo)(double, double));
 
int main()
{
        double l, k;
        for(int i=0; i < 3; i++)
        {
                std::cout << "Podaj wartosc 1: ";
                std::cin >> l;
                std::cout << "Podaj wartosc 2: ";
                std::cin >> k;
 
                double q = calculate(l, k, *add);
                std::cout << "Wartosc: " << q << "\nAdres: " << &q << std::endl;
        }
        return 0;
}
 
double add(double x, double y)
{
        return x + y;
}
 
double calculate(double p, double m, double (*foo)(double, double))
{
        return foo(p, m);
}

może to ci pomoże.

komentarz 17 lutego 2018 przez Sic Dyskutant (8,510 p.)
Dziękuję Ci za pomoc. Ostatni kod jaki napisałeś taką wersje programu już napisałem, jednak chciałem iść o krok naprzód stąd problem. Wskaźniki same w sobie rozumiem i wiem, że poprzedniej funkcji był błąd bo sam go zostawiłem nie wiedząc jak go poprawić.

To prawda mam problem ze wskaźnikami funkcji, nie do końca rozumiem ich działanie.

Dziękuję bardzo mi pomogłeś.

Podobne pytania

0 głosów
1 odpowiedź 456 wizyt
pytanie zadane 26 stycznia 2019 w C i C++ przez Pawli Początkujący (250 p.)
0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 31 grudnia 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)
0 głosów
1 odpowiedź 163 wizyt

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

61,948 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!

...