Program Console Vignaankosh.com
Execution Panel
Console is empty.
Callback function demonstration is an interactive C dry run visualizer from the Pointersfunctions programs section. Study the source code, then use the execution controls to follow each step, variable update, highlighted line, and console output.
This page provides a browser-based dry run with source-code highlighting, auto-scroll, voice narration controls, and execution output for learning the program step by step.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Callback function types
typedef void (*ProcessCallback)(int item, int index);
typedef int (*FilterCallback)(int item);
typedef void (*TimerCallback)(void);
// Process array with callback for each element
void processArray(int *arr, int size, ProcessCallback callback) {
int i;
for(i = 0; i < size; i++) {
callback(arr[i], i);
}
}
// Filter array using callback to decide which elements to keep
int* filterArray(int *arr, int size, FilterCallback filter, int *newSize) {
int i;
int *result = malloc(size * sizeof(int));
*newSize = 0;
for(i = 0; i < size; i++) {
if(filter(arr[i])) {
result[(*newSize)++] = arr[i];
}
}
return result;
}
// Different callback implementations
void printItem(int item, int index) {
printf("arr[%d] = %d\n", index, item);
}
void printSquare(int item, int index) {
printf("arr[%d]^2 = %d\n", index, item * item);
}
void printEvenOnly(int item, int index) {
if(item % 2 == 0) {
printf("arr[%d] = %d (even)\n", index, item);
}
}
int isEven(int item) {
return item % 2 == 0;
}
int isGreaterThan5(int item) {
return item > 5;
}
// Timer simulation using callback
void setTimer(int seconds, TimerCallback callback) {
printf("Timer set for %d seconds...\n", seconds);
printf("Simulating wait...\n");
callback(); // Fire the callback
}
void alarmCallback() {
printf("*** ALARM! Time's up! ***\n");
}
int main() {
int i;
int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = 10;
int filteredSize;
int *evens;
int *greater;
printf("=== Callback Examples ===\n\n");
printf("1. Print each element:\n");
processArray(numbers, size, printItem);
printf("\n2. Print squares:\n");
processArray(numbers, size, printSquare);
printf("\n3. Print even numbers only:\n");
processArray(numbers, size, printEvenOnly);
printf("\n4. Filter even numbers:\n");
evens = filterArray(numbers, size, isEven, &filteredSize);
printf("Even numbers: ");
for(i = 0; i < filteredSize; i++) {
printf("%d ", evens[i]);
}
printf("\n");
free(evens);
printf("\n5. Filter numbers >5:\n");
greater = filterArray(numbers, size, isGreaterThan5, &filteredSize);
printf("Numbers >5: ");
for(i = 0; i < filteredSize; i++) {
printf("%d ", greater[i]);
}
printf("\n");
free(greater);
printf("\n6. Timer callback (simulated):\n");
// setTimer(3, alarmCallback); // Would wait 3 seconds
return 0;
}