Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Function pointers and callbacks in c/c++

I was trying to remind how pointers worked in c and c++ and I found this very interesting video (Pointers in C/C++). In minute 3:14:00, he begins to talk about pointer functions and callbacks, and I ended a bit confused about the real application of them.

The example case he provides consists of a sorting algorithm that takes a function pointer as argument, which defines the comparison "rule" to follow (order from geater to smaller, order from smaller to greater, from greater to smaller given the absolute values…). He eventually ends with something like this:

#include<stdio.h>
int compare(int a, int b){
    if(a > b) return -1;
    return 1;
}
void MyBubbleSort(int A[], int n, int (*compare)(int,int)){
    int i,j,temp;
    for(i=0; i<n; i++){
        for(j=0; j<n-1; j++){
            if(compare(A[j], A[j+1]) > 0{
                temp = A[j];
                A[j] = A[j+1];
                A[j+1] = temp;
            }
        }
    }
}
int main(){
    int i, A[] = {3,2,1,5,6,4};
    MyBubbleSort(A,6,compare);
    for(i=0; i<6; i++) printf("%d ",A[i]);
}

When he wants to change the comparison rule, he changes the compare(int, int) content and that’s all. My question is, why would he do that, instead of just having a separate function called compare(int, int) that just does the same as the one showed in the code snippet, and just call that function from within MyBubbleSort(int[], int). Wouldn’t it just have the same behaviour? What are the benefits then? Are there any other interesting use cases?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Thank you very much for answers!

>Solution :

If I understand your question correctly, the main point is something that he mentions in the narration but does not include in the sample code: you could have several different comparison functions in your program, and use them at different times as appropriate, while still having just one MyBubbleSort function.

An example might look like:

int compare_increasing(int a, int b){
    if(a > b) return -1;
    return 1;
}

int compare_decreasing(int a, int b){
    if(a < b) return -1;
    return 1;
}

void MyBubbleSort(int A[], int n, int (*compare)(int,int));


}
int main(){
    // ...

    // sort in increasing order
    MyBubbleSort(A,6,compare_increasing);

    // sort in decreasing order
    MyBubbleSort(A,6,compare_decreasing);
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading