पर डाली गई सी ++ में एक नौसिखिया के रूप में मैं पॉइंटर्स के साथ थोड़ा सा खेल रहा हूं। मैं एक पूर्णांक के रूप में एक छोटी सरणी व्याख्या करने के लिए निम्नलिखित कोड लिखा है:सी ++ लघु सरणी 'उलट' जब पूर्णांक
#include <iostream>
int main(){
short array[2] = {10, 9};
short* pointer = array;
std::cout << pointer << ": " << *pointer << std::endl;
// 0xffffcbdc: 10
pointer++;
std::cout << pointer << ": " << *pointer << std::endl;
// 0xffffcbde: 9
int* pointer2 = (int*) array;
std::cout << pointer2 << ": " << *pointer2 << std::endl;
// 0xffffcbdc: 589834
}
क्यों है पूर्णांक 589'834 (0009 000A) के मूल्य और नहीं 655'369 (000A 0009)?
मुद्रित सूचक पते से ऐसा लगता है कि सरणी स्मृति में क्रम में है, तो पूर्णांक को कास्टिंग क्यों बदलता है?
बड़े-एंडियन देखें। और थोड़ा-एंडियन। – nicomp
"अपरिभाषित व्यवहार" पुलिस आज लागू है - मुझे जवाब पोस्ट करने की हिम्मत नहीं है। – nicomp
सबसे पहले, हेक्स-वैल्यू के रूप में आपके पूर्णांक प्रतिनिधित्व गलत हैं: 58 9'834 == 0x0009'000A और 655'369 == 0x000A'0009। आपके इंट-पॉइंटर रूपांतरण के बावजूद व्यवहार को अपरिभाषित करने के बावजूद, आपका सीपीयू "लिटिल एंडियन" का उपयोग करता है जिसका अर्थ है कि निचले बाइट्स को कम मेमोरी पतों पर संग्रहीत किया जाता है। "बिग एंडियन" में उच्च बाइट्स कम मेमोरी पतों पर संग्रहीत होते हैं। "लिटिल एंडियन" का उपयोग करके, कोई पैडिंग और 16-बिट शॉर्ट इनट्स में आपके सरणी में स्मृति में निम्न लेआउट नहीं है: 0 ए 00 09 00. इसके बजाए "बिग एंडियन" का उपयोग करके, स्मृति 00 0 ए 00 09. – CAF