गतिशील सरणियों के लिए ( मॉलोक या सी ++ नया ) के लिए आपको सरणी के आकार को दूसरों द्वारा बताए गए स्टोर करने की आवश्यकता है या शायद एक सरणी प्रबंधक संरचना का निर्माण करें जो ऐड, रिमूव, काउंट आदि को हैंडल करता है। दुर्भाग्य से सी लगभग ऐसा नहीं करता है। C ++ चूंकि आपको मूल रूप से प्रत्येक अलग-अलग सरणी प्रकार के लिए इसका निर्माण करना है, जो आप संग्रहीत कर रहे हैं जो कि बोझिल है यदि आपके पास कई प्रकार के सरणियाँ हैं जिन्हें आपको प्रबंधित करने की आवश्यकता है।
स्थिर सरणियों के लिए, जैसे कि आपके उदाहरण में, आकार प्राप्त करने के लिए उपयोग किया जाने वाला एक सामान्य मैक्रो है, लेकिन यह है अनुशंसित नहीं है क्योंकि यह जांच नहीं करता है कि क्या पैरामीटर वास्तव में एक स्थिर सरणी है। मैक्रो का उपयोग वास्तविक कोड में किया जाता है, उदाहरण के लिए लिनक्स कर्नेल हेडर में, हालांकि यह नीचे दिए गए से थोड़ा अलग हो सकता है:
#if !defined(ARRAY_SIZE)
#define ARRAY_SIZE(x) (sizeof((x)) / sizeof((x)[0]))
#endif
int main()
{
int days[] = {1,2,3,4,5};
int *ptr = days;
printf("%u\n", ARRAY_SIZE(days));
printf("%u\n", sizeof(ptr));
return 0;
}
आप इस तरह से मैक्रोज़ से सावधान रहने के कारणों के लिए Google कर सकते हैं। सावधान रहे।
यदि संभव हो तो, C ++ stdlib जैसे वेक्टर, जो बहुत सुरक्षित और उपयोग करने में आसान है।