असल में, मुझे लगता है कि सी जैसे संस्करण "0 के साथ शुरू करें" बहुत तार्किक है जब आप स्मृति व्यवस्थित तरीके से देखते हैं। सी में हम निम्नलिखित लिख सकते हैं:
int* T = new int[10];
सरणी के पहले तत्व है * टी। यह पूरी तरह से "तार्किक" है क्योंकि * टी पहली स्मृति मामले की ओर इशारा करता है। दूसरा तत्व दूसरा मामला है इसलिए * (टी + 1): हम एक "आकार (int)" से आगे बढ़ते हैं।
कोड को और अधिक पठनीय बनाने के लिए, सी ने उपनाम लागू किया: टी [i] के लिए * (टी + i)। पहले तत्व तक पहुंचने के लिए, आपको टी टी [0] तक पहुंचना होगा। यह पूरी तरह से प्राकृतिक है।
यह विचार iterators के लिए बढ़ा दी है:
std::vector<int> T(10);
int val = *(T.begin()+3);
टी [मैं] बस * (T.begin() + i) के लिए एक उपनाम है।
fortran/आर में, हम गणितीय समस्याओं के कारण 1 के साथ आमतौर पर शुरू लेकिन वहाँ निश्चित रूप से अन्य अच्छे विकल्प (उदाहरण के लिए सीएफ this link) है। यह मत भूलना कि किलेर आसानी से सरणी का उपयोग कर सकते हैं जो 0:
PROGRAM ZEROARRAY
REAL T(0:9)
T(0) = 3.14
END
"सामान्य '0' कुछ हद तक सापेक्ष है। सुबह में मेरा पहला कप कॉफी मेरा पहला है, न कि मेरा शून्य-वां। –
लेकिन जब आप पैदा होते हैं तो आप शून्य वर्ष के होते हैं और अपने पहले जन्मदिन के लिए एक वर्ष का इंतजार करना पड़ता है। – Frank
क्योंकि उम्र * पूरे वर्षों * में मापा जाता है। बस एक अलग सम्मेलन। मेरी उंगलियों को अभी भी 1 से 10 अंक दिया गया है। –