जब आप इस तरह एक सरणी बनाने के लिए संकलक बता:
unsigned char a[4] = {1, 2, 3, 4};
ये संख्या निम्न क्रम में स्मृति में कहीं रखा जाता है:
MemoryAddress0: 0x01 -> a[0]
MemoryAddress1: 0x02 -> a[1]
MemoryAddress2: 0x03 -> a[2]
MemoryAddress3: 0x04 -> a[3]
&a[0]
के मूल्य के साथ एक char
सूचक है MemoryAddress0
और 0x01
(int*)&a[0]
एक जाति है MemoryAddress0
के समान मान के साथ डी सूचक, लेकिन int*
के साथ इस बार टाइप करें ताकि यह लगातार चार बाइट्स इंगित करे।
अधिकांश मशीनों हम अपने दैनिक जीवन में उपयोग थोड़ा endian जिसका मतलब है कि वे सबसे महत्वपूर्ण एक करने के लिए कम से कम महत्वपूर्ण बाइट से स्मृति में multibyte मान संग्रहीत कर रहे हैं।
जब int*
चार बाइट्स की स्मृति के लिए इंगित करता है, तो पहला बाइट यह मुठभेड़ कम से कम महत्वपूर्ण बाइट है और दूसरा बाइट दूसरा सबसे महत्वपूर्ण और अन्य है।
MemoryAddress0: 0x01 -> 2^0 term
MemoryAddress1: 0x02 -> 2^8 term
MemoryAddress2: 0x03 -> 2^16 term
MemoryAddress3: 0x04 -> 2^24 term
इस प्रकार 4 बाइट पूर्णांक मान 0x01*2^0 + 0x02*2^8 + 0x03*2^16 + 0x04*2^24
जो 0x04030201
के बराबर है हो जाता है।
स्रोत
2012-09-08 09:28:23
'बी'' 0x4030201' नहीं है, क्या आपका मतलब है 'int b = * (int *) &a[0]; '? –
हां, मैंने गलत टाइप किया है। धन्यवाद। मैंने इसे – Learner
बदल दिया है जो आपने लिखा है वह अनिर्धारित व्यवहार है। इसे सही करने के लिए, आपको कहना चाहिए: 'int b; unsigned char * a = (unsigned char *) & b; '(और अपनी लाइन को हटा दें जो 'बी' घोषित करता है।) –