Function Pointers
Ab tak humne data (int, char) ko point karne wale pointers dekhe — function pointer ek function KO point karta hai. Function bhi memory mein kahi store hote hain, unka bhi ek address hota hai.
Function pointer ka use hota hai jab tumhe runtime par decide karna ho konsa function call karna hai — jaise ek calculator jo operation ke naam se sahi function choose kare, bina bade if-else chain ke.
int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }
int main() {
int (*operation)(int, int); // function pointer declare
operation = add;
printf("%d\n", operation(5, 3)); // 8
operation = subtract;
printf("%d\n", operation(5, 3)); // 2
return 0;
}- Function pointer = ek function ka address store karta hai
- Runtime par decide kar sakte ho konsa function call karna hai
- Syntax mein parentheses zaroori: int (*fp)(int, int)
Multiple function pointers ko ek array mein rakh sakte ho — ye ek "dispatch table" banane ka classic tareeka hai, jaise ek simple calculator jo operation ke index se sahi function choose kare, bina lambi if-else ya switch chain ke.
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int main() {
int (*operations[3])(int, int) = {add, sub, mul};
int choice = 1; // 0=add, 1=sub, 2=mul
printf("%d\n", operations[choice](10, 3)); // 7 (sub)
return 0;
}Function pointer ka raw syntax (int (*fp)(int, int)) padhna mushkil hota hai, especially jab parameters mein bhi function pointers ho. typedef se ek naya, readable naam bana sakte ho is type ke liye.
typedef int (*Operation)(int, int);
int add(int a, int b) { return a + b; }
int main() {
Operation op = add; // ab bahut zyada readable hai
printf("%d\n", op(5, 3)); // 8
Operation ops[3] = {add, add, add}; // array bhi clean lagta hai
return 0;
}