5.1.13 · HinglishC Programming

Function pointers — declaration, calling, use in callbacks

1,854 words8 min readRead in English

5.1.13 · Coding › C Programming


WHY do we even want this?


WHAT exactly is a function pointer?

Ek function ka naam uske address mein decay ho jaata hai. Toh int add(int,int) ke liye:

  • add → woh function
  • &add → uska address (same value, type int(*)(int,int))
  • add → zyaadatar expressions mein woh address mein bhi decay ho jaata hai

HOW to declare one (derive the syntax from scratch)

Ek normal declaration se shuru karo aur use step by step transform karo.


HOW to assign and call

int add(int a, int b) { return a + b; }
 
int (*p)(int, int);   // declare
p = add;              // assign (add decays to &add); p = &add; bhi kaam karta hai
int r1 = p(3, 4);     // call via pointer  -> 7
int r2 = (*p)(3, 4);  // explicit deref, bhi 7 (identical)

Callbacks — the killer use

Ek callback = tum ek function pointer doosre function ko dete ho, aur woh tumhe wapas call karta hai.

// qsort signature (from <stdlib.h>):
void qsort(void *base, size_t n, size_t size,
           int (*cmp)(const void *, const void *));

Dual coding: picture it

Figure — Function pointers — declaration, calling, use in callbacks

Arrays of function pointers (dispatch table)


typedef to stay sane


Common mistakes (Steel-man each)


Forecast-then-Verify

Recall Answer padhne se pehle outputs predict karo

int (*ops[2])(int,int) = {add, sub}; diya hai add/sub upar ki tarah:

  1. ops[0](5,2) → ?
  2. ops[1](5,2) → ?
  3. (*ops[1])(5,2) → ?

Answers: 1) 7 2) 3 3) 3 (explicit deref ≡ plain call).


Recall Feynman: 12-saal ke bacche ko samjhao

Ek TV remote imagine karo. Remote mein buttons hain, aur har button kuch karne ke liye wired hai (volume badhao, channel badlo). Ek function pointer ek aisa button hai jiska wiring tum rewire kar sakte ho. Tum keh sakte ho "jab main YEH button dabaaun, WOH action chalao." Ek callback tab hota hai jab tum TV ko ek button dete ho aur kehte ho "jab kuch ho to ise dabao." Toh tum kisi ko ek button (ek function) dete ho, aur woh tumhare liye sahi waqt par use dabata hai. Tum action decide karte ho; woh timing decide karte hain.


Active-recall flashcards

Ek function pointer kya store karta hai?
Ek function ka address (memory mein uske code ki shuruat).
Ek pointer p declare karo jo do ints lene wale aur int return karne wale function ki taraf point kare.
int (*p)(int, int);
int (*p)(int,int) mein parentheses kyun zaroori hain?
Unke bina int *p(int,int) ek int* return karne wala function declare karta hai; parens * ko pehle p se bind karte hain.
Function pointer p ko args 3,4 ke saath call karne ke do equivalent tarike?
p(3,4) aur (*p)(3,4).
Callback kya hota hai?
Ek function pointer jo tum doosre function ko pass karte ho taaki woh sahi waqt par tumhara code call kar sake.
qsort mein comparator parameter ka type kya hai?
int (*)(const void *, const void *).
Comparator mein x-y ki jagah (x>y)-(x<y) kyun use karte hain?
Yeh integer overflow ke risk ke bina sahi sign return karta hai.
3 function pointers int(int,int) ka array kaise likhte hain?
int (*ops[3])(int, int);
pointer to int(int,int) ko BinOp naam dene wala typedef do.
typedef int (*BinOp)(int, int);
Uninitialized function pointer ka khatre kya hai?
Use call karna garbage memory mein jump karta hai → undefined behaviour / crash; NULL se initialize karo aur check karo.
Kya add (ek function name) &add ke barabar hai?
Haan — ek function name uske address mein decay ho jaata hai; dono ka type int(*)(int,int) hai.

Connections

  • Pointers in C — data pointers vs code pointers
  • qsort aur C Standard Library — real-world callback
  • Arrays in C — function pointers ke arrays as dispatch tables
  • typedef — complex declarations ko tame karna
  • void pointers — callbacks mein generic args
  • Polymorphism — OOP languages is idea ko kaise implement karti hain (vtables = function pointers ke arrays)

Concept Map

stores

type encodes

must match target

yields address

needs

else means

enables

invoked by

both forms equal via

allows

powers

passed to

calls back your

Function pointer

Address of code

Return type plus param types

Function name decays

Declaration ret *name params

Parentheses bind * to name

p = add

Call p x or *p x

Choose function at runtime

Callback

qsort with cmp