🧩
Basics

Functions

Reusable Code Blocks
💡 Function ek recipe card hai — ek baar likh lo, jitni baar chahiye utni baar use karo, bina dobara poora process likhe.

Function ek naamed block hai jo specific kaam karta hai — return type, naam, parameters, aur body hoti hai. main() khud bhi ek function hai — har C program yahi se shuru hota hai.

C mein function ko use karne se pehle "declare" (prototype) karna padta hai agar wo baad mein "define" ho raha hai — warna compiler error dega ki function pehchana nahi. void return type ka matlab function kuch return nahi karta.

// Function prototype
int add(int a, int b);

int main() {
  int result = add(5, 3);
  printf("%d\n", result); // 8
  return 0;
}

// Function definition
int add(int a, int b) {
  return a + b;
}
🧩
Function ek recipe card hai — ek baar likh lo, jitni baar chahiye utni baar use karo, bina dobara poora process likhe.
1 / 5
⚡ Quick Recap
  • Function = reusable naamed code block
  • Prototype declare karo agar function baad mein define ho raha hai
  • void = kuch return nahi karta
On this page (2 subtopics)

C mein normal variables (int, float, char) function ko "by value" pass hote hain — function ke andar parameter ki copy milti hai, original variable change nahi hota. Ye Java ke primitive types jaisa hi behavior hai.

Agar function ke andar original variable change karna hai, uska address (pointer) pass karna padta hai — ye "pass by reference" jaisa effect deta hai, aage pointers subtopic mein detail se covered hai.

void tryToChange(int x) {
  x = 100;  // sirf local copy change hoti hai
}

int main() {
  int num = 5;
  tryToChange(num);
  printf("%d\n", num); // abhi bhi 5!
  return 0;
}
⚠️Common Mistake: Beginners aksar assume karte hain function ke andar variable change karne se original bhi change ho jaayega — C mein aisa nahi hota (arrays ke alawa), pointer chahiye hota hai.

Recursion tab hota hai jab function khud ko call kare — ek "base case" (jaha recursion rukta hai) aur ek "recursive case" (jaha function khud ko chhote input ke saath call karta hai) hona zaroori hai, warna infinite recursion ho jaata hai (aur eventually stack overflow crash).

int factorial(int n) {
  if (n <= 1) return 1;        // base case
  return n * factorial(n - 1); // recursive case
}

printf("%d\n", factorial(5)); // 120
💡Tip: Har recursive call apna khud ka stack frame use karta hai — bahut deep recursion (jaise factorial(100000)) stack overflow de sakta hai. Bade inputs ke liye loops recursion se zyada memory-safe hote hain.