How to apply a callback to an array (apply a function to each element) in C

2 Answers

0 votes
#include <stdio.h>

// Callback function: takes an int, returns an int 
int square(int x) {
    return x * x;
}

// Function that applies a callback to each element of an array 
// int (*callback)(int) is a function pointer.
void apply(int *arr, int size, int (*callback)(int)) {
    for (int i = 0; i < size; i++) {
        arr[i] = callback(arr[i]);   // Apply the callback
    }
}

int main() {
    int arr[] = {1, 2, 3, 4};
    int size = sizeof(arr) / sizeof(arr[0]);

    // Pass the callback (function name - square) without parentheses.
    // The callback is applied to each element.
    apply(arr, size, square);  

    // Print results 
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}


/*
run:

1 4 9 16 

*/

 



answered Mar 19 by avibootz
0 votes
#include <stdio.h>
 
// Callback with extra user data
 
// Callback that uses extra data (multiplier) 
int multiply(int x, void *data) {
    int factor = *(int *)data;   // Cast back to int pointer
    return x * factor;
}
 
// Apply callback with user data 
// You can pass any extra parameters (structs, configs, constants)
void apply(int *arr, int size, int (*callback)(int, void *), void *data) {
    for (int i = 0; i < size; i++) {
        arr[i] = callback(arr[i], data);
    }
}
 
int main() {
    int arr[] = {1, 2, 3, 4};
    int size = sizeof(arr) / sizeof(arr[0]);
    int factor = 10;
 
    apply(arr, size, multiply, &factor);
 
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}


 
/*
run:
 
10 20 30 40 
 
*/

 



answered Mar 19 by avibootz
...