नहीं, कहीं भी पास।
सी मानक गारंटी नहीं देता है कि फ़ंक्शन तर्क लगातार मेमोरी स्थानों (या किसी भी विशिष्ट क्रम में संग्रहीत हैं, उस मामले के लिए)। फ़ंक्शन पर फ़ंक्शन तर्क कैसे पारित किए जाते हैं यह तय करने के लिए यह संकलक और/या प्लेटफ़ॉर्म (आर्किटेक्चर) पर निर्भर करता है।
कुछ और स्पष्टता जोड़ने के लिए, यहां तक कि इस बात की कोई गारंटी नहीं है कि पारित होने वाले तर्क स्मृति (जैसे, ढेर) में संग्रहीत हैं। वे हार्डवेयर रजिस्टरों का भी उपयोग कर सकते हैं, जब भी लागू होते हैं), कुछ या संचालन को तेज़ बनाने के लिए सभी पैरामीटर के लिए। उदाहरण के लिए,
PowerPC
PowerPC वास्तुकला इतनी अधिकांश कार्यों को एकल स्तर कॉल के लिए रजिस्टर में सभी तर्क पारित कर सकते हैं रजिस्टरों की एक बड़ी संख्या है। [...]
MIPS
32 बिट MIPS के लिए सबसे अधिक इस्तेमाल किया बुला सम्मेलन O32 ABI जो रजिस्टरों में एक समारोह के लिए पहले चार तर्क गुजरता है $a0
- $a3
; बाद के तर्क ढेर पर पारित कर दिए जाते हैं। [...]
X86
86 आर्किटेक्चर कई अलग अलग बुला सम्मेलनों के साथ प्रयोग किया जाता है। आर्किटेक्चरल रजिस्ट्रारों की छोटी संख्या के कारण, x86 कॉलिंग सम्मेलन ज्यादातर स्टैक पर तर्क देते हैं, जबकि रिटर्न वैल्यू (या इसके लिए पॉइंटर) एक रजिस्टर में पास किया जाता है।
और इतने पर। full wiki article here देखें।
तो, आपके मामले में, bars[0]
एक वैध पहुँच है, लेकिन bars[1]
और bars[2]
मान्य हैं कि क्या, अंतर्निहित पर्यावरण (मंच/संकलक) पर निर्भर करता है, पूरी तरह से। आप जिस व्यवहार की अपेक्षा कर रहे हैं उस पर भरोसा न करें।
कहा कि, बस, nitpick करने के मामले में आप तर्क का उपयोग करने के इरादा नहीं है (किसी भी अगर) main()
को पारित कर दिया, तो आप बस हस्ताक्षर int main(void) {
को कम कर सकते हैं।
स्रोत
2016-07-25 10:10:19
क्या आप अपनी जिज्ञासा को पूरा करने के लिए कह रहे हैं, या क्या आपको कोई समस्या है जो आपको लगता है कि यह हल हो जाएगा? – StoryTeller
जिज्ञासा से बाहर, क्योंकि विविध तर्क इस तकनीक का उपयोग अपने तर्कों को फिर से करने के लिए करते हैं। –