🕹️
Pointers

Function Pointers

Pointing to Code, Not Data
💡 Function pointer ek TV remote hai jisme tum decide kar sakte ho konsa button dabane par konsa function chale — jaise ek hi remote se alag-alag operations choose kar sakte ho runtime par.

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 TV remote hai jisme tum decide kar sakte ho konsa button dabane par konsa function chale — jaise ek hi remote se alag-alag operations choose kar sakte ho runtime par.
1 / 2
⚡ झट से Recap
  • 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)
इस page में (2 subtopics)

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;
}
💡Tip: Ye pattern bade systems mein bahut use hota hai (jaise interpreters, state machines) — har "state" ya "command" ke liye ek function pointer, array/hashmap mein organize kiya hua.

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;
}