2010-07-08 11 views
14

sizeof का मुख्य कार्य क्या है (मैं सी ++ में नया हूं)। उदाहरणआकार क्या करता है?

int k=7; 
char t='Z'; 

लिए sizeof (k) या sizeof (int) और sizeof (char) क्या मतलब है?

+0

आप अपने char में 'गायब हैं। – Konrad

+8

@ टाइयलर मैकहेनरी टाइमिंग 0.08 सेकेंड पर मेरे लिए निशान से थोड़ा कम है। – DumbCoder

+8

@ डेविट: यदि आप एक प्रोग्रामिंग भाषा सीखने जा रहे हैं तो आपको मूल बातें प्राप्त करने के लिए भाषा पर एक सभ्य प्रारंभिक पुस्तक पढ़ने की कोशिश करनी चाहिए, न केवल इसे परीक्षण, त्रुटि, अनुमान और एसओ पर अंतहीन प्रश्नों पर छोड़ दें। –

उत्तर

49

sizeof(x) मेमोरी (बाइट्स में) की मात्रा देता है जो परिवर्तनीय या टाइप x पर कब्जा करता है। चर के मूल्य के साथ इसका कोई लेना-देना नहीं है।

उदाहरण के लिए, यदि आपके पास कुछ मनमानी प्रकार T की सरणी है तो उस सरणी के तत्वों के बीच की दूरी बिल्कुल sizeof(T) है।

int a[10]; 
assert(&(a[0]) + sizeof(int) == &(a[1])); 

जब एक चर पर इस्तेमाल किया है, यह है कि चर के प्रकार पर इसे का उपयोग करने के बराबर है:

T x; 
assert(sizeof(T) == sizeof(x)); 

एक नियम के-अंगूठे के रूप में, यह सबसे अच्छा है चर नाम जहां उपयोग करने के लिए संभव है, सिर्फ मामले में प्रकार परिवर्तन:

int x; 
std::cout << "x uses " << sizeof(x) << " bytes." << std::endl 
// If x is changed to a char, then the statement doesn't need to be changed. 
// If we used sizeof(int) instead, we would need to change 2 lines of code 
// instead of one. 

जब उपयोगकर्ता परिभाषित प्रकार पर इस्तेमाल किया, sizeof अभी भी उस प्रकार के उदाहरणों द्वारा इस्तेमाल किया स्मृति की मात्रा देता है, लेकिन यह उनका कहना है कि यह नहीं करता है लायक है इसके सदस्यों के योग के बराबर आवश्यक है।

struct Foo { int a; char b; }; 

जबकि sizeof(int) + sizeof(char) आम तौर पर 5 कई मशीनों पर, sizeof(Foo)8 हो सकता है क्योंकि संकलक संरचना pad out को इतना है कि यह 4 बाइट सीमाओं पर स्थित है की जरूरत है। यह हमेशा मामला नहीं है, और यह काफी संभव है कि आपकी मशीन sizeof(Foo) पर 5 होगा, लेकिन आप इस पर निर्भर नहीं हो सकते हैं।

+0

int का अर्थ है कि यदि परिवर्तनीय टी को आकार (टी) = 1 से टी = 100 दिया जाता है? –

+0

लेकिन यह मुझे दिखाता है 4 क्यों –

+0

'sizeof' के चर के * वैल्यू * के साथ कुछ लेना देना नहीं है। इसे प्रकार के साथ करना है।यह आपको बता रहा है कि आपके सिस्टम पर, 'int' प्रकार के सभी चरों को 4 बाइट स्टोरेज की आवश्यकता होती है। –

7

पीटर सिकंदर के जवाब देने के लिए जोड़ने के लिए: sizeof एक मूल्य या प्रकार के आकार पैदावार एक char --- char के आकार के गुणकों में के लिए स्मृति पता (सी या सी ++ द्वारा) की सबसे छोटी इकाई के रूप में परिभाषित किया जा रहा एक दिए गए आर्किटेक्चर (और, सी ++ में कम से कम, मानक के अनुसार आकार में कम से कम 8 बिट्स)। यह आमतौर पर "बाइट्स" (किसी दिए गए आर्किटेक्चर के लिए सबसे छोटी पता योग्य इकाई) द्वारा किया जाता है, लेकिन इसे स्पष्ट करने के लिए कभी दर्द नहीं होता है, और कभी-कभी sizeof (char) की विविधता के बारे में प्रश्न होते हैं, जो हमेशा 1 है।

+0

एक बाइट अनिवार्य रूप से "किसी दिए गए आर्किटेक्चर के लिए सबसे छोटी पता योग्य इकाई" नहीं है। कुछ सीडीसी साइबर कंप्यूटरों पर, सबसे छोटी पता योग्य इकाई 16-बिट शब्द है (पता 0 16-बिट्स है, पता 1 एक अलग 16-बिट्स है), और वे दो हिस्सों को बाइट्स के रूप में संदर्भित करते हैं। –

+0

@ जेम्स: दाएं: मेरा मुद्दा यह था कि "बाइट" एक स्वाभाविक रूप से संदिग्ध शब्द है, और इससे कोई फर्क नहीं पड़ता कि आप इसे कैसे परिभाषित करते हैं, कोई भी इसे अलग-अलग उपयोग करेगा। सीडीसी के बारे में दिलचस्प है। –

+0

अधिकांश लोग इस बात से सहमत होंगे कि एक बाइट 8 बिट्स है, और जबकि कुछ भ्रम होता था, आजकल यह मानकीकृत है: आईईसी 80000-13। इसके विपरीत, मशीन में सबसे छोटी एड्रेसेबल यूनिट को अक्सर एक शब्द कहा जाता है, और यह मशीन-निर्भर है। 16-, 32-, 64-बिट आर्किटेक्चर हैं, लेकिन यहां तक ​​कि उन संदर्भों में, बाइट अभी भी 8 बिट होगा। – Zane

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