नाम एक सरणी के अधिकांश संदर्भों में एक सूचक अपनी पहली तत्व को में decays। तो जब आप लिखना
void f(int arr[]);
void g(int arr[42]);
नाम arr
एक सूचक int करने में decays। दो घोषणाओं इन के बराबर हैं:
void f(int *arr);
void g(int *arr);
दो स्थानों पर जहां नाम क्षय नहीं होता है एक सरणी की परिभाषा में और sizeof
लिए एक तर्क के रूप में हैं। तो वैश्विक क्षेत्र में इस घोषणा int करने के लिए एक सूचक को परिभाषित नहीं करता:
int arr[];
क्योंकि इसे बनाने के लिए एक आसान गलती है और एक कि मुश्किल है नीचे ट्रैक करने के लिए मैं इस विशेष रूप से एक का उल्लेख है। यह एक सरणी को परिभाषित करता है, सूचक नहीं, भले ही तत्वों की संख्या निर्दिष्ट नहीं है। के रूप में अन्य स्रोत फ़ाइल से arr
को संदर्भित करने के लिए यह एक त्रुटि है (लेकिन जिसे निदान नहीं किया जाना चाहिए)।
स्रोत
2012-10-30 12:55:13
यह कोई फर्क नहीं पड़ता है जब तक कि आप किसी संदर्भ, पॉइंटर से सरणी या बहुआयामी सरणी का उपयोग न करें। – chris
यह सी और सी ++ के लिए अलग है। सी वीएलए है। सी ++ टेम्पलेट्स है। –
* "हम एक सी/सी ++ फंक्शन हेडर में चर के रूप में एक सरणी पास कर सकते हैं, जैसा कि *" - नहीं। आपके उदाहरण में फ़ंक्शन को पहले तत्व में पॉइंटर मिलता है, न कि सरणी। यह अपने आप का प्रयास करें; 'sizeof arr == sizeof int *', हमेशा। –