AnyCompiler

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;
}
Output
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.