title: Problem understanding a pointer to a function
body: <p>I'm fine with most of the program up until the signature  of selectionsort where there is a pointer to a function called compare but I don't see the function anywhere in this code. I guess what I'm trying to ask is how is compare working?</p>
  
  <pre><code>// Fig. 8.20: fig08_20.cpp
  // Multipurpose sorting program using function pointers.
  #include &lt;iostream&gt;
  #include &lt;iomanip&gt;
  using namespace std;
  
  // prototypes
  void selectionSort( int [], const int, bool (*)( int, int ) );
  void swap( int * const, int * const );   
  bool ascending( int, int ); // implements ascending order
  bool descending( int, int ); // implements descending order
  
  int main()
  {
     const int arraySize = 10;
     int order; // 1 = ascending, 2 = descending
     int counter; // array index
     int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
  
     cout &lt;&lt; "Enter 1 to sort in ascending order,\n" 
        &lt;&lt; "Enter 2 to sort in descending order: ";
     cin &gt;&gt; order;
     cout &lt;&lt; "\nData items in original order\n";
  
     // output original array
     for ( counter = 0; counter &lt; arraySize; counter++ )
        cout &lt;&lt; setw( 4 ) &lt;&lt; a[ counter ];
  
     // sort array in ascending order; pass function ascending 
     // as an argument to specify ascending sorting order
     if ( order == 1 ) 
     {
        selectionSort( a, arraySize, ascending );
        cout &lt;&lt; "\nData items in ascending order\n";
     } // end if
  
     // sort array in descending order; pass function descending
     // as an argument to specify descending sorting order
     else 
     {
        selectionSort( a, arraySize, descending );
        cout &lt;&lt; "\nData items in descending order\n";
     } // end else part of if...else
  
     // output sorted array
     for ( counter = 0; counter &lt; arraySize; counter++ )
        cout &lt;&lt; setw( 4 ) &lt;&lt; a[ counter ];
  
     cout &lt;&lt; endl;
  } // end main
  
  // multipurpose selection sort; the parameter compare is a pointer to
  // the comparison function that determines the sorting order
  void selectionSort( int work[], const int size,
                      bool (*compare)( int, int ) )
  {
     int smallestOrLargest; // index of smallest (or largest) element
  
     // loop over size - 1 elements
     for ( int i = 0; i &lt; size - 1; i++ )
     {
        smallestOrLargest = i; // first index of remaining vector
  
        // loop to find index of smallest (or largest) element
        for ( int index = i + 1; index &lt; size; index++ )
           if ( !(*compare)( work[ smallestOrLargest ], work[ index ] ) )
              smallestOrLargest = index;
  
        swap( &amp;work[ smallestOrLargest ], &amp;work[ i ] );
     } // end if
  } // end function selectionSort
  
  // swap values at memory locations to which 
  // element1Ptr and element2Ptr point
  void swap( int * const element1Ptr, int * const element2Ptr )
  {
     int hold = *element1Ptr;
     *element1Ptr = *element2Ptr;
     *element2Ptr = hold;
  } // end function swap
  
  // determine whether element a is less than 
  // element b for an ascending order sort
  bool ascending( int a, int b )
  {
     return a &lt; b; // returns true if a is less than b
  } // end function ascending
  
  // determine whether element a is greater than 
  // element b for a descending order sort
  bool descending( int a, int b )
  {
     return a &gt; b; // returns true if a is greater than b
  } // end f   return a &gt; b; // returns true if a is greater than b
  </code></pre>