12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // arfupt.cpp -- an array of function pointers
- #include <iostream>
- // various notations, same signatures
- const double * f1(const double ar[], int n);
- const double * f2(const double [], int);
- const double * f3(const double *, int);
- int main()
- {
- using namespace std;
- double av[3] = {1112.3, 1542.6, 2227.9};
- // pointer to a function
- typedef const double *(*p_fun)(const double *, int);
- p_fun p1 = f1;
- auto p2 = f2; // C++0x automatic type deduction
- cout << "Using pointers to functions:\n";
- cout << " Address Value\n";
- cout << (*p1)(av,3) << ": " << *(*p1)(av,3) << endl;
- cout << p2(av,3) << ": " << *p2(av,3) << endl;
- // pa an array of pointers
- p_fun pa[3] = {f1,f2,f3};
- // auto doesn't work with list initialization
- // but it does work for initializing to a single value
- // pb a pointer to first element of pa
- auto pb = pa;
- cout << "\nUsing an array of pointers to functions:\n";
- cout << " Address Value\n";
- for (int i = 0; i < 3; i++)
- cout << pa[i](av,3) << ": " << *pa[i](av,3) << endl;
- cout << "\nUsing a pointer to a pointer to a function:\n";
- cout << " Address Value\n";
- for (int i = 0; i < 3; i++)
- cout << pb[i](av,3) << ": " << *pb[i](av,3) << endl;
- // what about a pointer to an array of function pointers
- cout << "\nUsing pointers to an array of pointers:\n";
- cout << " Address Value\n";
- // easy way to declare pc
- auto pc = &pa;
- cout << (*pc)[0](av,3) << ": " << *(*pc)[0](av,3) << endl;
- // slightly harder way to declare pd
- p_fun (*pd)[3] = &pa;
- // store return value in pdb
- const double * pdb = (*pd)[1](av,3);
- cout << pdb << ": " << *pdb << endl;
- // alternative notation
- cout << (*(*pd)[2])(av,3) << ": " << *(*(*pd)[2])(av,3) << endl;
- // cin.get();
- return 0;
- }
- // some rather dull functions
- const double * f1(const double * ar, int n)
- {
- return ar;
- }
- const double * f2(const double ar[], int n)
- {
- return ar+1;
- }
- const double * f3(const double ar[], int n)
- {
- return ar+2;
- }
|