मेरा प्रश्न यह है कि sizeof()
कब गुजरता है,
गतिशील सरणी
परिवर्तनीय लंबाई सरणी है।वेरिएबल लम्बाई सरणी (सी केवल) पर आकार का व्यवहार
के उदाहरण पर विचार करें:
int fun(int num_of_chars)
{
char name_arr[num_of_chars] = {0};
/* Do something*/
return sizeof(name_arr);
}
इस उदाहरण में यह स्पष्ट है कि वापसी मान एक संकलन समय स्थिर नहीं है। क्योंकि आकार num_of_chars
के रन टाइम मान पर निर्भर करता है।
C99 मानक से एक उद्धरण (6.5.3.4):
sizeof
ऑपरेटर अपनी संकार्य के आकार (बाइट्स में) है, जो एक अभिव्यक्ति या एक प्रकार की parenthesized नाम हो सकता है अर्जित करता है। आकार ऑपरेंड के प्रकार से निर्धारित किया गया है। नतीजा एक पूर्णांक है। यदि ऑपरेंड का प्रकार परिवर्तनीय लंबाई सरणी प्रकार है, तो ऑपरेंड का मूल्यांकन किया जाता है; अन्यथा, ऑपरेटिंग मूल्यांकन नहीं किया गया है और परिणाम एक पूर्णांक निरंतर है।
क्या मैं से [.... संकार्य मूल्यांकन किया जाता है ....] है, जब तर्क sizeof()
के लिए पारित एक
गतिशील सरणी
चर लंबाई सरणी है, sizeof()
एक 'की तरह बर्ताव करता है कि समझ सकता हूँ एक ऑपरेटर के रूप में कार्य करें और नहीं।
क्या मेरी समझ सही है?
'sizeof()' अभी भी एक ऑपरेटर है; जब तर्क एक परिवर्तनीय लंबाई सरणी है तो यह अब संकलन-समय स्थिरता उत्पन्न नहीं करता है। –
क्या आपका कोड संकलित करता है? मुझे 'वेरिएबल-साइज्ड ऑब्जेक्ट प्रारंभ नहीं किया जा सकता है' त्रुटि –