हाँ, यह सी से विरासत में मिली है समारोह:
void foo (char a[100]);
पैरामीटर एक सूचक होने के लिए समायोजित किया होगा, और इतना हो जाता है:
void foo (char * a);
यदि आप चाहते हैं कि सरणी प्रकार संरक्षित है, तो आपको सरणी के संदर्भ में पास होना चाहिए:
void foo (char (&a)[100]);
सी ++ '03 8.3.5/3:
... एक समारोह के प्रकार के निम्नलिखित नियमों का उपयोग निर्धारित होता है। प्रत्येक पैरामीटर का प्रकार अपने स्वयं के घोषित-विनिर्देशक-सेक और घोषणाकर्ता से निर्धारित होता है। प्रत्येक पैरामीटर के प्रकार का निर्धारण करने के बाद, "सरणी की टी" या "फ़ंक्शन रिटर्निंग टी" के किसी पैरामीटर को क्रमशः "पॉइंटर टू टी" या "ट्रिगर रिटर्निंग टी के लिए सूचक" के रूप में समायोजित किया जाता है ....
वाक्य रचना की व्याख्या करने के लिए: गूगल में "सही-बाएँ" शासन के लिए
चेक; मुझे here का एक विवरण मिला।
यह रूप में लगभग इस उदाहरण पर लागू किया जाएगा इस प्रकार है: पहचानकर्ता में 'एक'
'एक' एक
चाल सही है
void foo (char (&a)[100]);
प्रारंभ - हम पाते हैं )
इसलिए हम (
की तलाश में दिशा को उलट देते हैं। हम छोड़ दिया ले जाते हैं हम &
पारित 'एक' एक संदर्भ
&
हम उद्घाटन (
तो हम फिर से रिवर्स और सही लग रही तक पहुँचने के बाद है। अब हम देखते हैं [100]
'एक' 100
की एक सरणी के लिए एक संदर्भ है और हम फिर से दिशा रिवर्स जब तक हम char
तक पहुँचने:
'एक' के लिए एक संदर्भ है 100 वर्णों की एक सरणी
स्रोत
2009-08-25 13:22:38
मैं हमेशा एसटीडी का उपयोग :: सरणी इन मामलों में, इस तरह की समस्या से निपटने के लिए होने और एसटीडी एल्गोरिदम के साथ भी काम करता है – paulm
क्या सख्त प्रकार सुरक्षा रोकता है? सख्त प्रकार की सुरक्षा का वादा किसने किया है? सी ++ में ऐसी कोई बात नहीं है। –
टीएल; नीचे दिए गए उत्तरों के लिए डीआर: समारोह में पारित होने पर Arrays पॉइंटर्स बन जाते हैं, इसलिए जब आप अपना आकार जांचते हैं तो आपको पॉइंटर का आकार मिलता है। यदि आप केवल सी के साथ काम कर रहे हैं, तो मैं सुझाव दे सकता हूं कि आप किसी अन्य पैरामीटर के रूप में सरणी से बाहर निकलने का प्रयास कर रहे आकार को पहले से गणना करें। –