मैं इस कार्यक्रम के उत्पादन में समझ में नहीं आता:पता: और (संख्या)
int arr[]={1,7,4,2,5,8};
int x=(&(arr[arr[1]-arr[4]])-arr);
printf("%d" ,x);
arr[arr[1]-arr[4]]
4. के बराबर है क्या यह &(4)
मतलब है? यह 2 क्यों प्रिंट करता है?
मैं इस कार्यक्रम के उत्पादन में समझ में नहीं आता:पता: और (संख्या)
int arr[]={1,7,4,2,5,8};
int x=(&(arr[arr[1]-arr[4]])-arr);
printf("%d" ,x);
arr[arr[1]-arr[4]]
4. के बराबर है क्या यह &(4)
मतलब है? यह 2 क्यों प्रिंट करता है?
arr[1] - arr[4]
ऐसा लगता है जैसे यह दिखता है। 7 - 5 = 2
, तो चलो 2
साथ कि जगह ले जाने:
arr[2]
भी बस के रूप में यह लग रहा है है कि। 4
। &
अपना पता लेता है, जो कि arr
है, जो कि arr
है, जो दो int
एस ऑफसेट है।
&(arr[2]) - arr
कि arr
घटा देती है, तो आप arr
है, जो दो int
रों है से arr[2]
की भरपाई के साथ छोड़ दिया कर सकें। तुम वहाँ जाओ।
मामले में आप यह 8
, ठीक है, कि बस कैसे सूचक अंकगणित है होने की उम्मीद कर रहे थे। उन दोनों को कास्टिंग unsigned int
रहे हैं:
(unsigned int)&arr[2] - (unsigned int)arr
8
निकलेगा, एक int
चार बाइट्स है कम से कम जब। (Demo)
"2" के प्रिंट मूल्य को कैसे निकाला जा सकता है यह दिखाने के लिए मिनीटेक के उत्तर को देखें।
हालांकि, मुझे लगता है कि आपके मामले में आप केवल गलत समझाते हैं कि &
ऑपरेटर कैसे काम करता है। हां, arr[arr[1]-arr[4]]
4
है, लेकिन इसका मतलब यह नहीं है कि &(arr[arr[1]-arr[4]])
&4
कर रहा है; यह &(arr[2])
कर रहा है; और यह arr[2]
का पता ले रहा है, arr[2]
का मान नहीं, जो 4
है।