Theory
60 variables, या एक idea
Marks program को सभी 60 students के marks एक ही साथ याद रखने हैं (आप topper तब नहीं ढूँढ सकते जब हर mark को अगला आते ही भूलते जाएँ)।
Horror-movie वाला version: int m1, m2, m3, ... m60; और 60 scanf lines।
C वाला version: एक नाम, 60 numbered boxes:
int marks[60];
यह एक array है, और loops के बाद, यह इस subject का दूसरा सबसे बड़ा idea है। यह C का सबसे मशहूर आश्चर्य भी छिपाता है: numbering ZERO से शुरू होती है।
Theory
एक railway coach
Array एक railway coach है: एक coach का नाम (S4), कई एक जैसी berths, हर एक पर एक number। आप कभी नहीं कहते "Ramesh नाम वाली berth"; आप कहते हैं "S4, berth 23"। एक जैसी shape की berths (एक ही data type), लगातार (memory में अगल-बगल), number से तुरंत पहुँच में। C की एक अजीब बात: पहली berth का number 0 है, और इस unit का हर आगे का lesson इसी बात पर टिका है।
Theory
Declaration और initialization
- Declare:
int marks[5];पाँच int boxes reserve करता है, array की उम्र भर size तय। - Initialize:
int marks[5] = {70, 55, 90, 62, 78}; - Partial:
int marks[5] = {70, 55};बाकी को zeros से भरता है। - C को गिनने दें:
int marks[] = {70, 55, 90};एक size-3 array बनाता है।
Indexing: marks[0] पहला element है, marks[4] पाँच में से आख़िरी। Index हमेशा 0 से n-1 तक चलता है। और marks[i] एक for loop के साथ वही शादी है जिसके बारे में यह unit है:
for (i = 0; i < 5; i++) printf("%d\n", marks[i]);
Theory
Character arrays: C में text
Text बस chars का एक array है:
char name[10] = "Riya";
Memory रखती है: R i y a `\0` और पाँच खाली boxes। वह \0 (null terminator, ASCII 0) invisible है पर ज़रूरी: यह चिह्नित करता है कि TEXT कहाँ खत्म होता है, क्योंकि array खुद word से बड़ा है। हर string function जिससे आप मिलेंगे (strlen, printf %s...) array पर तब तक चलता है जब तक \0 न मिल जाए।
ध्यान से गिनिए: "Riya" को कम से कम 5 boxes चाहिए, चार letters और terminator।
Quiz
int marks[5] के लिए, कौन से indexes valid हैं?
- 0 to 4
- 1 to 5
- 0 to 5
- 1 to 4
Show the answer
0 to 4
पाँच boxes, zero से numbered: 0, 1, 2, 3, 4। marks[5] लिखना array के बाहर कदम रखता है, और C आपको रोकता नहीं: वह compile होता है, चलता है, और चुपचाप जो पड़ोस में रहता है उसे corrupt कर देता है (undefined behaviour)। n-boxes-का-मतलब-0-से-n-1 वाला नियम अस्तित्व में सबसे ज़्यादा test होने वाला array तथ्य है।
Think first
Boxes पढ़िए
int marks[5] = {70, 55, 90, 62, 78}; दिया है, दिमाग़ में निकालिए: marks[0], marks[2], और marks[4] क्या हैं? और marks[5] में क्या ख़तरनाक है?
Show the answer
marks[0] = 70 (पहला box), marks[2] = 90 (तीसरा box), marks[4] = 78 (पाँचवाँ और आख़िरी)। marks[5] एक पाँच-box array का छठा box होगा: out of bounds, कोई compiler error नहीं, runtime पर garbage पढ़ना या पड़ोसी को corrupt करने वाला लिखना। अगर आपने marks[2] के लिए 55 जवाब दिया, तो आपने एक से गिना, ठीक वही आदत जिसे इस unit को तोड़ना है।
Quiz
char city[10] = "Surat"; Text असल में कितने boxes घेरता है, और letter t के ठीक बाद क्या बैठता है?
- 6 boxes: S-u-r-a-t और terminator '\0'
- 5 boxes: ठीक पाँच letters
- 10 boxes: पूरा array ही text है
- 6 boxes: पाँच letters और एक space character
Show the answer
6 boxes: S-u-r-a-t और terminator '\0'
String literals एक invisible मेहमान लाते हैं: आख़िरी letter के बाद null terminator '\0', इसलिए "Surat" दस-box array के अंदर छह boxes घेरता है। बाकी चार खाली हैं। यह '\0' (ASCII 0) है, space (ASCII 32) नहीं, और इस +1 को भूलना क्लासिक char-array sizing error है।
Watch out
Marks (और programs) कहाँ कटते हैं
एक से गिनना: marks[1] दूसरा element है; zero-start पक्का कर लीजिए। Out of bounds: valid indexes n-1 पर खत्म; marks[n] ठीक compile होता है और चुपचाप corrupt करता है, C आप पर पूरा भरोसा करता है। '\0' की जगह भूलना: char name[4] = "Riya" में terminator के लिए जगह नहीं, और string functions अंत के आगे भाग जाएँगे। Fixed size: array बाद में बढ़ नहीं सकता; जितना ज़्यादा से ज़्यादा चाहिए उतना declare कीजिए।
Theory
यहाँ से unit का रास्ता
बाद के लिए एक और राज़: array का NAME (marks) दरअसल box zero का ADDRESS है, इसीलिए scanf("%s", name) को कोई & नहीं चाहिए था, और यही आगे तीन lessons बाद pointers की पूरी कहानी बन जाता है। पर अगला: arrays को काम में लाना, किसी roll number को ढूँढना और toppers की list sort करना, वे operations जो exams हर साल पूछते हैं।
Summary
Key takeaways
- Array: एक नाम, n एक जैसे-type boxes, memory में लगातार, size तय।
- Indexing ZERO से शुरू: valid indexes 0 से n-1; marks[0] पहला है।
- पूरा initialize कीजिए, आंशिक (बाकी 0 हो जाते हैं), या {} से C को गिनने दें।
- marks[i] + एक for loop, दर्जनों variables की जगह लेता है।
- char arrays text रखते हैं एक invisible '\0' terminator के साथ: "Riya" को 5 boxes चाहिए।
- Out-of-bounds access चुपचाप compile होता है और corrupt करता है, C कभी जाँच नहीं करता।
- याद रखने का hook: एक railway coach, berths zero से numbered।