Lesson 7 — Beginner
Arrays in C
Ek variable mein ek value — 100 students ke marks ke liye 100 variables? Bilkul nahi. Array ek line mein ek fixed-size group banata hai, jahan har element ek number (index) se milta hai. Is lesson mein hum array ke basics, operations aur 2D tak jaayenge.
Array kaise banta hai
WHAT
Array same type ke elements ka contiguous (lagatar) group hai, jise ek naam se jana jaata hai. Har element index se access hota hai — pehla index 0, aakhri (size - 1).
WHEN
Jab ek jaisi cheezein bahut hon — marks, scores, prices, names ka list. Loops ke saath pair karke poora data ek line mein process hota hai.
WHERE
Har jagah — matrix, strings (char array), records list, input buffers. String C mein array hi hai — agli lesson mein detail.
#include <stdio.h>
int main() {
int marks[5] = {90, 85, 78, 92, 88};
// marks[0] = 90 (pehla), marks[4] = 88 (aakhri)
// Total size = 5 * 4 = 20 bytes
printf("Pehla = %d\n", marks[0]);
printf("Aakhri = %d\n", marks[4]);
return 0;
}
Output:
Pehla = 90
Aakhri = 88
- Size constant chahiye: int marks[5] ya int n; int a[n] (C99 VLA) — runtime mein badalna allowed nahi (fixed).
- Index 0 se: marks[5] for 5 elements = out of bounds (aakhri index 4).
- Memory contiguous: elements lagatar baithe hain — isliye (p + 1) seedha agle pe pahunch jaata hai.
- Partial init allowed: int a[5] = {10, 20}; → baaki 0 ho jaate hain.
Traversal — sum, max aur average
#include <stdio.h>
int main() {
int a[5] = {12, 7, 19, 3, 25};
int sum = 0, max = a[0];
for (int i = 0; i < 5; i++) {
sum += a[i];
if (a[i] > max) max = a[i];
}
printf("Sum=%d Max=%d Avg=%.1f\n",
sum, max, (float)sum / 5);
return 0;
}
Output: Sum=66 Max=25 Avg=13.2
Traversal ka pattern: loop 0 se size tak, har i pe a[i] — baaki kaam wahi. Sum ke liye accumulator, max ke liye comparison, search ke liye if. Ek hi loop, alag-alag kaam.
2D arrays — matrix world
#include <stdio.h>
int main() {
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int b[2][3] = {{7, 8, 9}, {10, 11, 12}};
int c[2][3];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
c[i][j] = a[i][j] + b[i][j];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++)
printf("%d ", c[i][j]);
printf("\n");
}
return 0;
}
Output:
8 10 12
14 16 18
2D array = rows × columns, access a[i][j] (i = row, j = column). Memory mein phir bhi sab lagatar hi hai — rows one after another. Nested loop ka classic use: row-wise print aur matrix operations.
- Declaration: int a[rows][cols] — dono size compile time constant chahiye (VLA alag).
- Matrix transpose, multiplication, diagonal sum — sab nested loop pattern.
- int a[2][3] ka total size = 2*3*4 = 24 bytes.
Array ki traps aur real rules
GALAT (undefined behaviour):
int a[5];
printf("%d", a[5]); // bahar ka index — garbage/crash
printf("%d", a[-1]); // peeche bhi bahar
SAHI (size nikalo):
int n = sizeof(a) / sizeof(a[0]); // = 5
// Array direct copy nahi hota:
int b[5] = a; // COMPILE ERROR (C mein)
// chahiye toh loop ya memcpy() se copy karo
- C array bounds check NAHI karta — a[100] bhi chal jaata hai, chupke se memory kharab. Tumhari zimmedaari hai.
- Uninitialized array: bina value ke garbage — result kabhi kabhi naya hi aayega.
- Array = pointer decay: function ko array bhejne pe size nahi jaata (pointer ban jaata hai) — isi liye size alag se pass karte hain.
- Initialization zaroori: = {0} se sab zero kar do jab loop na chalao.
Exercise
Question: Array ka pehla element kaunse index pe hota hai? (0 ya 1)
Question: int a[10] ka total size kitne bytes hai? (int = 4 bytes, sirf number)
Question: int a[5] mein last valid index kaunsa hai? Sirf number daalo.
Question: Array ki size nikalne wala operator kaunsa hai?
Common mistakes
- a[size] ko valid samajhna: int a[5] mein valid index 0-4 hain. a[5] bahar hai — C check nahi karta, garbage/crash.
- Function ko array bhejte waqt size na dena: Array pointer ban jaata hai — sizeof size nahi deta. Size hamesha alag parameter se pass karo.
- Do arrays ko = se copy kar dena: C mein b[5] = a; compile error hai. Loop se copy karo ya memcpy() use karo.
Teacher ke paas 40 students ke marks hain — array hi toh hai. Ek loop chalao aur result nikaalo, jaise humne sum/max mein kiya:
#include <stdio.h>
int main() {
int marks[4] = {66, 78, 91, 55};
int pass = 0;
for (int i = 0; i < 4; i++)
if (marks[i] >= 33) pass++;
printf("%d/4 pass\n", pass);
return 0;
}
Output: 4/4 pass- TCS NQT: array output (index, size) + bounds trap — 1-2Q.
- GATE: array addressing formula (base + i*size) aur memory layout.
- College exam: sum/max/matrix addition program likhwana — har saal.
- Trap: "C mein array bounds check hota hai" — galat, nahi hota.
Arrays clear. Agla lesson — Strings — mein dekhenge char array se text kaise handle hota hai.