2014-04-13 8 views
5

मैं एक कोड लिख रहा था जिसमें सी में 2 डी सरणी आयाम [101] एक्स [101] को संभालना शामिल है। हालांकि, मुझे किसी दिए गए समय पर स्मृति का उपयोग करने के लिए बाध्य किया गया है।फ़ंक्शन कॉल के दौरान मेमोरी प्रबंधन

void manipulate(int grid_recv[101][101]) 
{ 
    //Something 
} 

void main() 
{ 
    int grid[101][101]; 
    manipulate(grid); 
} 

तो कहते हैं कि मैं एक सरणी ग्रिड [101] [101] मेरी मुख्य() में बना सकते हैं और फिर एक और कार्य करने के लिए हेरफेर के लिए इसे पारित करने देता है। अब समारोह हेरफेर करता है()grid_recv अर्थात में कॉपी पूरे मैट्रिक्स ग्रिड गुजर की इस तरह से मैं दो बार स्मृति की मात्रा (यानी दो बार ग्रिड के आकार) का उपयोग कर रहा हूँ?

उत्तर

9

नहीं सी में, सरणी कार्यों के पैरामीटर के रूप में पारित नहीं किया जा सकता है।

आप वास्तव में क्या करते हैं वह सरणी को इंगित करने वाला सूचक बना रहा है। तो अतिरिक्त स्मृति जो आप इसका उपयोग केवल उस सूचक के आकार का उपयोग करते हैं।

+0

तो मूल रूप से आपका मतलब यह है कि अगर मुझे सरणी को grid_recv [101] [101] (और int ** grid_recv नहीं) के रूप में प्राप्त होता है, तो भी मुझे एक सूचक प्राप्त हो रहा है? फिर चित्र में शामिल सरणी का आकार कैसा है? – Dubby

+0

@ डब्बी हां, मेरा मतलब है कि सी में पैरामीटर के रूप में सरणी को पारित करने का कोई भी संभावित तरीका नहीं है। मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं, लेकिन यदि आपको फ़ंक्शन में सरणी के आकार की आवश्यकता है तो आपको इसे पारित करने की आवश्यकता है एक अतिरिक्त तर्क के रूप में। – chrk

+0

धन्यवाद! यह मेरे प्रश्न का उत्तर देता है :) और एक आखिरी सवाल: मैं कैसे तय करूं कि int ** arr प्रतिनिधित्व और int arr [n] [n] प्रतिनिधित्व को 2 डी सरणी प्रारंभ करने के लिए कब उपयोग करें? सी भी वैरिएबल आकार सरणी प्रारंभ करने की अनुमति देता है? – Dubby

संबंधित मुद्दे