बीच क्या अंतर है:सी ++ * बनाम [] एक समारोह पैरामीटर के रूप में
void foo(item* list)
{
cout << list[xxx].string;
}
और
void this(item list[])
{
cout << list[xxx].string;
}
आइटम मानते हुए है:
struct item
{
char* string;
}
सूचक की ओर इशारा करते के साथ
वर्णों की एक सरणी के पहले
और list
आइटमों की एक सरणी है ...
+1 "ध्यान दें कि संकेत जब पैरामीटर के रूप में पारित कर दिया करने के लिए क्षय सरणियों" के लिए कर रहे हैं। मुझे यह नहीं पता था, जानना दिलचस्प है। – Drise
केवल एरे अभिव्यक्ति को पॉइंटर्स के लिए क्षय नहीं करते हैं, जब आप एक फ़ंक्शन पैरामीटर के रूप में एक सरणी प्रकार निर्दिष्ट करते हैं, तो यह वास्तव में ओवरलोडिंग, 'आकार' और 'decltype' सहित सभी उद्देश्यों के लिए एक सूचक प्रकार में बदल जाता है। आप इसे एक तरह से घोषित भी कर सकते हैं और इसे एक अलग तरीके से परिभाषित कर सकते हैं (लेकिन आपको शायद नहीं करना चाहिए)। – aschepler
मानक से पाठ को जोड़ना अच्छा होगा, ताकि किसी को यह इंप्रेशन देने से बचें कि सरणी और पॉइंटर्स सामान्य रूप से समान हैं। फ़ंक्शन पैरामीटर केवल एक विशेष मामला है जहां मानक राज्य "प्रत्येक पैरामीटर के प्रकार को निर्धारित करने के बाद," टी के सरणी "प्रकार के किसी भी पैरामीटर को [...]" टी को पॉइंटर "के रूप में समायोजित किया जाता है [...]।" [dcl.fct] 8.3.5/5। – bames53