Wskaźnik na funkcję / tablicę

Wskaźnik na funkcję / tablicę
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam takie zadanie:

Zdefiniuj i zainicjalizuj:

a) Wskaźnik do funkcji:

Kopiuj
int * fun1 (int, int, int)

b) Tablicę wsk do funkcji:

Kopiuj
int * fun2 (int)

Rozumiem to w ten sposób:

a)

Kopiuj
int *fun1(int a, int b, int c)
{
   int *ptr;
   *ptr = a + b + c;
   return ptr;
}

int main()
{
    int val = *fun1(1,2,3);
    int *pptr = fun1(5,6,7);
    cout << val << "|" << *pptr << endl;
    return 0;
}

b)

Kopiuj
int * fun2(int a)
int(*p[1])(int x);
int main(void)
{
    p[0]= fun2
}

Czy to jest dobre rozwiązanie?

UN
  • Rejestracja: dni
  • Ostatnio: dni
0

W podpunkcie a nigdzie nie masz wskaźnika na funkcję
.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0
Kopiuj
int *ptr;
*ptr = a + b + c;

Zadeklarowałeś wskaźnik, ale nie ustawiałeś jego wartości, więc nie wiadomo gdzie wskazuje. Nie zarezerwowałeś pamięci tylko od razu próbujesz mazać po losowej lokacji.


(a)

Kopiuj
int* sum(int a, int b, int c)
{
    int* ptr = new int;
    *ptr = a + b + c;
    return ptr;
}

int main()
{
    int* (*functionPtr)(int, int, int) = sum;
    int* ptr = functionPtr(1, 2, 3);
    int x = *ptr;
    delete ptr;
}

W przypadku wskaźników na funkcję prawie zawsze warto jednak zdefiniować typ osobno:

Kopiuj
using functionPtr = int* (*)(int, int, int);
functionPtr myFunction = sum;
int* ptr = myFunction(1, 2, 3);

(b) W drugim przypadku **zdecydowanie** należy zdefiniować typ ```cpp int* foo(int) { return nullptr; }

int* bar(int)
{
return nullptr;
}

int main()
{
using fPtr = int* (*)(int);
fPtr tab[2];
tab[0] = foo;
tab[1] = bar;
}

Kopiuj
Natomiast z czystej ciekawości, kod bez `using` wyglądałby tak
```cpp
int* (*tab[2])(int);
tab[0] = foo;
tab[1] = bar;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.