यदि अभिव्यक्ति type name[count]किसी फ़ंक्शन में लिखी गई है, तो आप सी कंपाइलर को स्टैक फ्रेम sizeof(type)*countबाइट्स पर आवंटित करने और सरणी में पहले तत्व के पते की गणना करने के लिए कहते हैं।
यदि अभिव्यक्ति type name[count]सभी कार्यों और संरचना परिभाषाओं के बाहर लिखी गई है, तो आप सी कंपाइलर को डेटा खंड sizeof(type)*countबाइट्स पर आवंटित करने और सरणी में पहले तत्व के पते की गणना करने के लिए कहते हैं।
nameवास्तव में निरंतर ऑब्जेक्ट है जो सरणी में पहले तत्व के पते को संग्रहीत करता है और प्रत्येक ऑब्जेक्ट जो किसी मेमोरी के पते को संग्रहीत करता है, उसे पॉइंटर कहा जाता है, इसलिए यही कारण है कि आप nameएक सरणी के बजाय एक पॉइंटर के रूप में व्यवहार करते हैं । ध्यान दें कि सी में सरणियों को केवल पॉइंटर्स के माध्यम से एक्सेस किया जा सकता है।
यदि countएक स्थिर अभिव्यक्ति है जो शून्य का मूल्यांकन करती है तो आप सी संकलक को शून्य बाइट्स को स्टैक फ्रेम या डेटा सेगमेंट पर आवंटित करने के लिए कहते हैं और सरणी में पहले तत्व का पता वापस करते हैं, लेकिन ऐसा करने में समस्या यह है कि पहला तत्व शून्य-लंबाई सरणी मौजूद नहीं है और आप किसी ऐसी चीज़ के पते की गणना नहीं कर सकते जो मौजूद नहीं है।
यह तर्कसंगत है कि तत्व नं। -length सरणी count+1में मौजूद नहीं है count, तो यही कारण है कि सी कंपाइलर शून्य-लंबाई सरणी को एक फ़ंक्शन के अंदर और बाहर चर के रूप में परिभाषित करने से मना करता है, क्योंकि nameतब की सामग्री क्या है ? क्या पते nameवास्तव में संग्रहीत करता है?
यदि pएक सूचक है तो अभिव्यक्ति p[n]के बराबर है*(p + n)
जहाँ सही अभिव्यक्ति में तारांकन * पॉइंटर का डीपरेशन ऑपरेशन होता है, जिसका अर्थ है कि पॉइंट द्वारा मेमोरी को एक्सेस करना p + nया उस एक्सेस को एक्सेस करना जिसके एड्रेस में स्टोर किया गया है p + n, जहां p + nपॉइंटर एक्सप्रेशन है, यह एड्रेस को लेता है pऔर इस एड्रेस पर नंबर को nगुणा करता है पॉइंटर के प्रकार का आकार p।
क्या पता और नंबर जोड़ना संभव है?
हाँ यह संभव है, क्योंकि पता अहस्ताक्षरित पूर्णांक है जिसे सामान्यतः हेक्साडेसिमल नोटेशन में दर्शाया गया है।