Pointers aur Arrays
Jab ek array zyadatar expressions mein use hota hai, to ye apne pehle element ke pointer mein 'decay' ho jaata hai — isiliye int *p = numbers bina kisi & ke kaam karta hai. Ek baar p array ke start par point karta hai, to p + 1 ka matlab 'address mein 1 add karo' nahi hota — iska matlab hai 'ek int aage badho', compiler automatically sizeof(int) se scale karta hai.
#include <stdio.h>
int main() {
int numbers[3] = {10, 20, 30};
int *p = numbers;
printf("%d %d %d\n", *p, *(p + 1), *(p + 2));
printf("%d %d %d\n", p[0], p[1], p[2]);
return 0;
}10 20 30 10 20 30
numbers[i] literally *(numbers + i) ke roop mein define hota hai — square-bracket indexing friendlier syntax ke saath pointer arithmetic hai, koi alag language feature nahi. Isiliye C arrays mein bounds checking nahi hoti: numbers[i] bas ek address computation hai, aur compiler ko pata nahi hota ki wo address abhi bhi array ke andar hai ya nahi.
Aage: strings — C mein built-in string type kyun nahi hai, aur ek string actually under the hood kya hota hai.
Practice exercise
Ek int numbers[3] = {10, 20, 30} aur int *p = numbers diya gaya hai, pointer arithmetic (*(p + 1)) use karke doosra element print karo.