Arrays
Array same-type elements ka fixed-size collection hai, memory mein contiguous (ek ke baad ek) store hota hai. Index 0 se shuru hota hai — pehla element arr[0], last element arr[size-1].
C mein array ka size fix hota hai declare hote waqt, aur C khud bounds check nahi karta — agar tum arr[10] access karo ek size-5 array par, koi error nahi aayegi turant, lekin ye "undefined behavior" hai (crash ya galat data mil sakta hai). Java mein ye ArrayIndexOutOfBoundsException deta, C mein nahi!
int marks[5] = {90, 85, 78, 92, 88};
printf("%d\n", marks[0]); // 90
printf("%d\n", marks[4]); // 88
for (int i = 0; i < 5; i++) {
printf("%d ", marks[i]);
}- Array = fixed-size, same-type, contiguous memory
- Index 0 se shuru
- C bounds check nahi karta — out-of-bounds access "undefined behavior" hai
Array ko declare karte waqt hi initialize kar sakte ho ({1,2,3} jaisa), ya baad mein element-by-element. Agar initialize karte waqt size nahi doge, C khud gin lega kitne elements diye — int arr[] = {1,2,3} automatically size 3 ban jaata hai.
Agar size do lekin kam elements initialize karo, baaki automatically 0 ho jaate hain — int arr[5] = {1,2} ka matlab {1, 2, 0, 0, 0}.
int a[3] = {10, 20, 30};
int b[] = {1, 2, 3, 4}; // size auto = 4
int c[5] = {1, 2}; // {1, 2, 0, 0, 0}
int zeros[100] = {0}; // saare 100 elements 0Jab array function mein pass karte ho, actually poora array copy nahi hota — sirf uska address (pointer) pass hota hai. Isliye function ke andar array modify karne se original array bhi change ho jaata hai (Java mein bhi arrays reference type hain, similar behavior).
Function ko array ka size khud nahi pata hota (sirf pointer milta hai) — isliye size ko separately parameter ke roop mein pass karna padta hai.
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int nums[5] = {1, 2, 3, 4, 5};
printArray(nums, 5);
return 0;
}