मैं की एक सटीक डुप्लिकेट होने की वजह से एक सवाल पहले कि बंद हो गया पढ़ इससरणी तर्क के लिए पॉइंटर को क्षय क्यों दिखता है आकार() पर लागू नहीं होता है?
When a function has a specific-size array parameter, why is it replaced with a pointer?
और
How to find the 'sizeof' (a pointer pointing to an array)?
लेकिन यह पढ़ने के बाद मैं अभी भी कैसे sizeof से उलझन में हूँ() काम करता है। मैं समझता हूँ कि एक समारोह के लिए एक तर्क के रूप में इस तरह के एक सरणी गुजर
void foo(int a[5])
के रूप में सरणी तर्क एक सूचक को खस्ताहाल का परिणाम देगा। उपर्युक्त 2 प्रश्न लिंक में जो मुझे नहीं मिला वह एक स्पष्ट उत्तर था कि क्यों यह है कि sizeof()
फ़ंक्शन स्वयं को इस पॉइंटर क्षय व्यवहार से मुक्त (या कम से कम प्रतीत होता है) से मुक्त किया गया है। sizeof() किसी भी अन्य समारोह की तरह तो
int a[5] = {1,2,3,4,5};
cout << sizeof(a) << endl;
तो ऊपर उत्पादन 4
20
के बजाय चाहिए व्यवहार किया है। क्या मुझे कुछ स्पष्ट याद आया है क्योंकि यह सूचक व्यवहार के क्षय का विरोधाभास है ??? इसे फिर से लाने के लिए खेद है, लेकिन मुझे वास्तव में समझने में कठिनाई हो रही है कि ऐसा क्यों होता है जब तक कि वास्तव में इसके बारे में सोचने के बिना वर्षों तक काम का आनंदपूर्वक उपयोग न किया जाए।
नोट: 'शून्य फू (int (& a) [5]) 'नहीं * * सरणी तर्क क्षय का कारण बनता है। यह लक्ष्य महत्वपूर्ण है, स्रोत नहीं। – Xeo
'शून्य फू (int a [5]) '- मैं वास्तव में चाहता हूं कि पैरामीटर फॉर्म को बहिष्कृत किया जाएगा और केवल' void foo (int * a) 'फ़ॉर्म को अनुमति दी जाएगी, यह भ्रम के अलावा कुछ भी नहीं है। मुझे परवाह नहीं है कि यह कौन सा कोड टूटता है। –