Wsk_do_funkcji jako argument funkcji

0

Chcialem sie zapytac dlaczego moge wywolac tak funkcje odebrana poprzez wskaznik jako argument funkcji chodzi mi o wywolanie
suma =** wsk_na_fun(22)**+l; moge zapisac rownoczesnie tak : suma = (*wsk_na_fun)(22)+l; i tez dziala.
Czy jest jakas roznica ? czy mozna naprzemiennie stosowac te zapisy ?

 
#include <iostream>

using namespace std;
int funkcja(int l){
    return l+5;
}
int przyjme_funkcje(int (*wsk_na_fun)(int),int l){
    int suma ;
    suma = wsk_na_fun(22)+l;

    return suma;
   }
int main()
{
    funkcja(5);

   cout << przyjme_funkcje(funkcja,5);
    return 0;
}

2

Nie ma żadnej różnicy, kompilator jest na tyle sprytny, że pozwala na zapis bez gwiazdki, który jest ładniejszy i bardziej przypomina naturalne wywołanie funkcji.

funkcja(5);

bezsensowna instrukcja, która nic nie robi.

Jak już się bawisz wskaźnikami do funkcji, to używaj using albo typedef, żeby nie pisać takich stworów

int przyjme_funkcje(int (*wsk_na_fun)(int),int l)

W C++11 można pisać tak:

using functionPtr = int (*)(int);
int przyjme_funkcje(functionPtr wsk_na_fun, int l)

W starym C++ można tak:

typedef int (*functionPtr)(int);
int przyjme_funkcje(functionPtr wsk_na_fun, int l)
2

W C++98 można jeszcze bez gwiazdek napisać tak:

#include <iostream>
 
using namespace std;
int funkcja(int a){
    return a+5;
}

template<class Func> 
int przyjme_funkcje(Func wsk_na_fun, int a){
    int suma ;
    suma = wsk_na_fun(22)+a;
 
    return suma;
}

int main()
{
    cout << przyjme_funkcje(funkcja,5);
    return 0;
}

Uwaga: nie używaj zmiennych o nazwie "l" ponieważ przy niektórych czcionkach trudno je odróżnić od "1".

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