किन शब्दों का क्या अर्थ है, इसकी स्पष्ट परिभाषा रखना महत्वपूर्ण है। दुर्भाग्य से स्थैतिक और गतिशील सरणियों के कई अर्थ हैं।
स्टेटिक वैरिएबल वैरिएबल मेमोरी एलोकेशन के उपयोग से परिभाषित चर होते हैं । यह C / C ++ से स्वतंत्र एक सामान्य अवधारणा है। C / C ++ में हम वैश्विक, फ़ाइल या स्थानीय स्कोप जैसे स्थैतिक चर बना सकते हैं:
int x[10];
static int y[10];
foo() {
static int z[10];
स्वचालित चर आमतौर पर स्टैक-आधारित मेमोरी आवंटन का उपयोग करके कार्यान्वित किए जाते हैं । इस तरह से C / C ++ में एक स्वचालित सरणी बनाई जा सकती है:
foo() {
int w[10];
क्या इन सरणियों x, y, z
, औरw
आम में क्या है कि उनमें से प्रत्येक के लिए आकार तय हो गया है और संकलन समय पर परिभाषित किया गया है।
कारणों में से एक यह है कि एक स्वचालित सरणी और एक स्थिर सरणी के बीच के अंतर को समझना महत्वपूर्ण है, स्थिर भंडारण आमतौर पर ऑब्जेक्ट फ़ाइल के डेटा अनुभाग (या BSS अनुभाग ) में लागू किया जाता है और कंपाइलर सरणियों तक पहुंचने के लिए निरपेक्ष पते का उपयोग कर सकता है। जो स्टैक-आधारित भंडारण के साथ असंभव है।
डायनेमिक ऐरे से आमतौर पर जो मतलब होता है वह एक ऐसा नहीं है जो रेज़िजेबल है, लेकिन एक रन-टाइम पर निर्धारित निश्चित आकार के साथ डायनेमिक मेमोरी एलोकेशन का उपयोग करके लागू किया गया है। C ++ में यह new
ऑपरेटर का उपयोग करके किया जाता है ।
foo() {
int *d = new int[n];
लेकिन रनटाइम का उपयोग करके परिभाषित फ़िक्सेस आकार के साथ एक स्वचालित सरणी बनाना संभव है alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
एक सच्चे डायनेमिक ऐरे के लिए std::vector
C ++ (या C में वैरिएबल लेंथ एरे ) जैसी किसी चीज का उपयोग करना चाहिए ।
ओपी के प्रश्न में असाइनमेंट के लिए क्या मतलब था? मुझे लगता है कि यह स्पष्ट है कि जो चाहता था वह एक स्थिर या स्वचालित सरणी नहीं था, लेकिन एक है जो या तो गतिशील मेमोरी आवंटन का उपयोग करता थाnew
ऑपरेटर या गैर-निश्चित आकार के सरणी का उपयोग करके उपयोग करता था जैसे std::vector
।