Lesson 9 — Intermediate

Functions in C

Function code ka reusable block hai — ek baar likho, hazaar jagah bulao. Is lesson mein hum dekhenge function kaise banate hain, arguments kaise jaate hain (aur kyun original change nahi hota), recursion kya hai, aur static/local/global variables mein kya farak hai.

⏱ 15 min• Intermediate• Strings

Function kaise banta hai — prototype aur definition

WHAT

Function ek named block hai jo ek kaam karta hai, chahe input le (parameters) ya na le, aur chahe value lautaye (return type) ya na lauta. Prototype compiler ko function ka signature pehle batata hai.

WHEN

Jab ek logic dobara-dobara aaye, jab code lamba ho jaaye, jab team mein baantna ho — turant function banao. Modular code = professional code.

WHERE

Har project mein. printf, strlen, main — sab functions hain. tumhare apne functions bhi isi tarah bante hain.

#include <stdio.h>

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

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

int add(int a, int b) {       // definition
    return a + b;
}

Output:
8
30

Pass by value — copy hi jaati hai

#include <stdio.h>
void show(int x) {
    x = 100;             // sirf LOCAL copy badli
}
int main() {
    int a = 10;
    show(a);
    printf("a = %d\n", a);   // a = 10 (change nahi hua!)
    return 0;
}

Output: a = 10

C mein arguments pass by value hain — function ko asli variable nahi, uski copy milti hai. Function apni copy pe chahe kare, bahar wali variable jaisi thi waisi hi rehti hai.

// Value lautani ho — return use karo
int max(int a, int b) {
    return (a > b) ? a : b;
}
int main() {
    int m = max(10, 30);    // 30 assign ho gaya
    printf("%d\n", m);
}
// Output: 30
Asli change chahiye? Pass by reference C mein seedha nahi hai — uske liye ADDRESS bhejo (int *x) aur andar se dereference karo. Yahi concept agla lesson — Pointers — pura kholta hai.

Recursion — function khud ko bulaye

#include <stdio.h>

int fact(int n) {
    if (n == 0) return 1;        // base case — yahan rukna hai
    return n * fact(n - 1);      // khud ko bulaya
}

int fib(int n) {
    if (n <= 1) return n;        // fib(0)=0, fib(1)=1
    return fib(n - 1) + fib(n - 2);
}

int main() {
    printf("fact(5) = %d\n", fact(5));  // 120
    printf("fib(6) = %d\n", fib(6));    // 8
    return 0;
}

Output:
fact(5) = 120
fib(6) = 8

fact(5) = 5 × fact(4) = 5 × 4 × fact(3) ... = 5 × 4 × 3 × 2 × 1 × 1 = 120. Har call apna frame stack pe rakhta hai — isliye base case ke bina stack overflow.

Scope — local, global aur static

#include <stdio.h>
int count = 0;                 // GLOBAL — poori file mein

void counter(void) {
    static int s = 0;          // STATIC — ek baar init, phir yaad
    s++;
    count++;
    printf("static=%d global=%d\n", s, count);
}
int main() {
    counter();   // static=1 global=1
    counter();   // static=2 global=2
    counter();   // static=3 global=3
    return 0;
}
Interview question: Q: "static variable kahan store hota hai?" A: data segment mein (stack nahi) — isliye program tak value bachi rehti hai. Static function ka matlab bhi hota hai: sirf isi file mein use karo.

Exercise

Question: Function ka prototype function ki definition se PEHLE kyun likha jaata hai? (do words — compiler ko pehle)

Question: fact(5) kitna return karta hai? Sirf number daalo.

Question: C mein arguments kaise pass hote hain — by value ya by reference?

Question: Recursion mein infinite call se bachne wali shart ka naam? (base case / else)

Common mistakes

Desi example: Dukaan ka counter — static ki taakat

Dukaan ka counter roz zero nahi hota — din bhar chalta rehta hai. Static variable bhi yahi karta hai: ek baar shuru, phir har call pe yaad:

c
#include <stdio.h>
void bill(void) {
    static int total = 0;   // memory mein bana rehta hai
    total += 50;
    printf("Bill total = %d\n", total);
}
int main() {
    bill();   // Bill total = 50
    bill();   // Bill total = 100
    bill();   // Bill total = 150
    return 0;
}
Exam mapping (TCS / GATE / College)
  • TCS NQT: recursion output (fact/fib) + pass by value concept — 1-2Q.
  • GATE: call stack, static vs auto storage, recursion depth.
  • College exam: recursion se factorial/reverse number program likhwana.
  • Trap: "C pass by reference deta hai" — nahi, sirf pointer se emulate karte hain.
Lesson complete?

Functions clear. Agla lesson — Pointers — C ka sabse powerful (aur feared) topic, jahan memory ka asli khel hota hai.

Popular courses: Data Science Course in Lucknow · AI Course in Lucknow · Python Course in Lucknow · Power BI Course · Data Analytics Course