#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
*/