2010-05-05 5 views
24

के आकार को खोजने के लिए कैसे।सरणी के आकार पता लगाने के लिए सी</p> <p>कोई भी तरीका एक बार पूरे सरणी traversing के बिना उपलब्ध में एक पूर्णांक सरणी के आकार को खोजने के लिए कैसे, पूर्णांक सरणी

+14

आप इस सरणी कैसे लागू किया लौटने के लिए काम करना चाहिए? सिद्धांत रूप में आप ओ (1) (ज्ञात आकार), ओ (एन) (शून्य-समाप्त), या असंभव में सरणी आकार को जानते हैं। – kennytm

+0

आमतौर पर सरणी स्थिर चर के रूप में बनाई जाती हैं और इसे बनाने के दौरान आपको कुछ लंबाई बीतनी होगी। – Jack

+1

@ जैक: सरणी "आमतौर पर" स्थिर क्यों होगी ??? – sbi

उत्तर

72

यदि सरणी वैश्विक, स्थिर, या स्वचालित चर (int array[10];) है, तो sizeof(array)/sizeof(array[0]) काम करता है।

यदि यह एक गतिशील आवंटित सरणी (int* array = malloc(sizeof(int)*10);) है या फ़ंक्शन तर्क (void f(int array[])) के रूप में पारित किया गया है, तो आप रन-टाइम पर इसका आकार नहीं पा सकते हैं। आपको आकार कहीं भी स्टोर करना होगा।
ध्यान दें कि sizeof(array)/sizeof(array[0]) दूसरे मामले के लिए भी ठीक है, लेकिन यह चुपचाप गलत परिणाम देगा।

+0

शायद सरणी क्षय समझाते हुए एक प्रश्न का जिक्र करें और इंगित करें? अक्सर विषय –

+1

सी ++ नौसिखियों के लिए इस सी प्रश्न पर पहुंचने के लिए: [सीडीएस में सरणी के बारे में जो भी आप कभी भी जानना चाहते थे] (http://stackoverflow.com/q/4810664/140719) एक FAQ में। – sbi

+0

http://stackoverflow.com/questions/5493281/c-sizeof-a-passed-array – delive

-1
int len=sizeof(array)/sizeof(int); 

काम करना चाहिए।

+2

नहीं - कई मामलों में यह * काम * नहीं करेगा। –

+2

यह काम करता है, हालांकि 'site_t len ​​= sizeof (array)/sizeof (array [0]); 'यह थोड़ा बेहतर है (यानी यह अभी भी काम करता है जब सरणी तत्वों का डेटाटाइप बदल दिया गया है। –

+4

@Grzegorz: हमें दिखाएं कि यह कैसे काम करता है इस सरणी के लिए: 'शून्य एफ (int सरणी []) {site_t len ​​= sizeof (array)/sizeof (array [0]);} ' – sbi

4

तो सरणी स्थिर है आवंटित:

size_t size = sizeof(arr)/sizeof(int); 

यदि सरणी गतिशील आवंटित (ढेर) है:

int *arr = malloc(sizeof(int) * size); 

चर आकार आगमन का एक आयाम है जहां।

3

_msize(array) Windows में या लिनक्स में malloc_usable_size(array) गतिशील सरणी

दोनों malloc.h के भीतर स्थित हैं और दोनों एक size_t

+1

वे उपयोगी हैं, लेकिन बहुत पोर्टेबल नहीं ... – glglgl

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