c - How to find the 'sizeof' (a pointer pointing to an array)? -


सबसे पहले, यह कुछ कोड है:

  int main () {int days [ ] = {1,2,3,4,5}; Int * ptr = days; Printf ("% u \ n", आकार (दिन)); प्रिंटफ़ ("% u \ n", आकारफ (पीटीआर)); वापसी 0; }  

क्या सरणी के आकार का पता लगाने का कोई तरीका है जो ptr इंगित कर रहा है (इसके बजाए इसके आकार देने की बजाय, जो चार बाइट्स पर है 32-बिट सिस्टम)?

नहीं, आप नहीं कर सकते संकलक यह नहीं जानता है कि सूचक क्या इंगित कर रहा है। इसमें चालियां होती हैं, जैसे कि ज्ञात आउट-ऑफ-बैंड मान के साथ सरणी को समाप्त करना और फिर उस मूल्य तक आकार की गिनती करना, लेकिन यह आकार का आकार का उपयोग नहीं कर रहा है।

एक और चाल है, जिसकी वजह से पता लगाया गया है, जो आकार को कहीं और छिपाना है उदाहरण के लिए, यदि आप गतिशील रूप से सरणी को आवंटित कर रहे हैं, तो आपको आवंटित आवंटित ब्लॉक से एक इंट बड़ा आवंटित करें, पहले इंट में आकार छिपाना, और ptr + 1 को सरणी में पॉइंटर के रूप में लौटाएं। जब आपको आकार की आवश्यकता होती है, तो अंकुरित मूल्य पर सूचक और झांकना घटें। बस पूरे ब्लॉक को शुरुआत से शुरू करने के लिए याद रखना, और न सिर्फ सरणी।


Comments