Wskaźnik na funkcję / tablicę

0

Mam takie zadanie:

Zdefiniuj i zainicjalizuj:

a) Wskaźnik do funkcji:

int * fun1 (int, int, int)

b) Tablicę wsk do funkcji:

int * fun2 (int)

Rozumiem to w ten sposób:

a)

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)

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

Czy to jest dobre rozwiązanie?

0

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

0
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)

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:

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;
}

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

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