Foundations — restrict keyword — aliasing hint
5.1.32 · D1· Coding › C Programming › restrict keyword — aliasing hint
Uss waade ko samajhne se pehle, aapko har woh symbol padhna aana chahiye jo parent note mein use hota hai. Yeh page har ek cheez ko zero se build karta hai, ek aisi tartib mein jahan har piece apne pehle waale piece pe tika ho. Yahan kuch bhi assume nahi kiya gaya ki aapne pehle C likhi hai.
0. Building blocks, tartib mein
Hum is line ka matlab piece by piece assemble karenge — yeh poore topic ki star hai:
void add(int * restrict a, const int * restrict b, const int * restrict c, int n);Is page ke end tak isme har token aapke dimag mein ek picture ban jaayegi.
1. Memory = lambi sadak par numbered boxes ki katar

Figure dekhein. Boxes ki katar memory hai. Har box ke neeche uska address (0, 1, 2, 3, …) hai — ek seedha counting number. Har box ke andar ek value hai (data). Address aur value do alag cheezein hain: address = "kaun sa box", value = "box mein kya hai". Inhe apne dimag mein alag rakho; baaki sab kuch isi par depend karta hai.
Yeh topic ko kyun chahiye: restrict ek waada hai ki kaun se boxes ko do pointers touch kar sakte hain. Agar aap memory ko numbered boxes ki tarah picture nahi karte, toh "overlap" aur "aliasing" sirf alfaaz hain. Poori kahani ke liye Pointers in C dekhein.
2. Variable ek named box hai
x— naam jo aap box ke baare mein baat karne ke liye use karte ho.5— value jo abhi andar hai.- Box ka neeche ek address hota hi hai (maano, box #12), chahe aap generally care na karo ki woh kya hai.
Yeh topic ko kyun chahiye: pointers ek aise box ka address store karte hain. Koi named boxes nahi → pointer ke liye point karne ko kuch nahi.
3. & — "ka address"
Yeh topic ko kyun chahiye: parent ka decision rule likhta hai \&p[i] \ne \&q[j] — woh & bilkul yahi hai: "element i ka address" "element j ke address" ke barabar nahi hona chahiye. Yeh locations compare kar raha hai, pooch raha hai "kya yeh do boxes ek hi box hain?".
4. Pointer ek parchaa hai jo address hold karta hai

Figure mein, p ko ek chhote card ke roop mein arrow ke saath draw kiya gaya hai. Arrow ki tail pointer hai; arrowhead us box par land karta hai jise woh point karta hai. int *p mein * padhta hai "ka pointer hai" — toh int *p = "p ek int box ka pointer hai."
Yeh topic ko kyun chahiye: restrict ek qualifier hai jo aap pointers se attach karte ho. Agar pointer aapke dimag mein slip-of-paper-holding-an-address nahi hai, toh "do pointers ek hi memory ko" ka koi picture nahi.
5. *p — "arrow follow karo" (dereference)
p= address (parchaa).*p= us address par rehne waali value (arrow jahan jaake rukta hai woh box mein kya hai).
Yeh topic ko kyun chahiye: parent ke *a, *b, *factor sab dereferences hain — arrow ke doosre end par box ko read/write karna. Poora speed argument isi ke baare mein hai ki compiler ko yeh arrows kitni baar re-walk karna padta hai.
6. Arrays aur p[i] — ek starting arrow ke saath boxes ki poori katar

Figure mein ek array dikhayi gayi hai, jisme a[0], a[1], a[2], a[3] labelled hain. Pink mein likha key insight: a + 1 (ya pointer arr+1) sirf ek aisa arrow hai jo ek box baad start hota hai. Toh ek hi katar mein do pointers — ek a par, ek a+1 par — overlapping stretches of boxes par point karte hain. Yahi overlap woh poora khatre wali baat hai jo parent ka Example 2 warn karta hai.
Yeh topic ko kyun chahiye: parent ka fatal example copy(arr+1, arr, 3) precisely isliye overlap karta hai kyunki arr aur arr+1 ek shared katar mein do arrows hain. Ab aap dekhte ho kyun woh collide karte hain.
7. Aliasing — do arrows ek hi box par landing

Figure mein do cases side by side hain:
- Left (blue, safe):
aaurbalag rows par point karte hain. Koi box share nahi.ake zariye likhnabko kabhi disturb nahi kar sakta. Yahi woh duniya hai jahanrestrictek sach waada hai. - Right (pink, aliasing):
aaurboverlap karte hain.ake zariye ek store silently ek aisi box badal deta hai jisebbaad mein read karega. Yahanrestrictek jhooth hoga.
Yeh topic ko kyun chahiye: restrict literally yeh assertion hai "left wali picture sach hai, right wali nahi." Pointer aliasing mein sab kuch isi split se aata hai.
8. const — "main in boxes mein kuch nahi badlunga" (ek alag waada!)
Yeh topic ko kyun chahiye: parent ki signature dono qualifiers stack karti hai. Aapko const int * restrict b ko do alag waade padhne chahiye jo ek pointer se glued hain: (read-only) aur (no aliasing).
9. void, int, n — baaki ka plumbing
Chhote pieces, jaldi se, taaki signature mein kuch bhi mystery na rahe:
void(return type ke roop mein) = "yeh function kuch wapas nahi deta." Woh sirf apna kaam karta hai.int= ek box jisme whole number hota hai.n= ek ordinaryintvariable jo count ke roop mein use hota hai — loop kitne boxes walk karta hai.for (int i = 0; i < n; i++)= "iko0sen-1tak, ek-ek karke chalaao." Yeh woh loop hai jo har box visit karta hai.
Yeh topic ko kyun chahiye: restrict se speed win sirf loops ke andar dikhti hai, kyunki wahan compiler kaam baar-baar repeat karta hai. Loop nahi, toh dramatic payoff nahi.
10. "Qualifier" vs "keyword", aur undefined behaviour
Yeh topic ko kyun chahiye: restrict ka poora risk yahi hai ki jhooth bolne par UB trigger hota hai, aur compiler warn nahi karega. restrict C99 standard features mein aaya; usse pehle, C mein yeh hint dene ka koi tarika hi nahi tha.
Prerequisite map
Equipment checklist
Daayni taraf chhupao aur khud test karo. Agar koi jawab fuzzy lage, toh main note kholne se pehle woh section dobara padho.
Address vs value — kaun sa "kaun sa box" hai aur kaun sa "andar kya hai"?
&x aapko kya deta hai?
x naam ki box ka address (location), uska content nahi.int *p mein * ka kya matlab hai?
p declare kiya gaya hai ek int box ka address hold karne ke liye.*p = 9; mein ab * ka kya matlab hai?
p point karta hai aur wahan 9 store karo.Box-terms mein a[i] kya hai?
i steps daayein wali box.arr aur arr+1 kyun overlap karte hain?
arr[1] aur (arr+1)[0] literally ek hi box hain.Aliasing ko ek sentence mein define karo.
Kya const overlap ke baare mein kuch kehta hai?
const modify na karne ke baare mein hai; overlap/aliasing restrict ka kaam hai.Kya restrict keyword hai ya qualifier?
Undefined behaviour kya hai?
Connections
- Hinglish version →
- Pointers in C
- const qualifier
- Pointer aliasing
- memcpy vs memmove
- Undefined behaviour in C
- C99 standard features