2012-07-01 9 views
7

मैं इस कार्यक्रम के उत्पादन में समझ में नहीं आता:पता: और (संख्या)

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 क्यों प्रिंट करता है?

उत्तर

13
arr[1] - arr[4] 

ऐसा लगता है जैसे यह दिखता है। 7 - 5 = 2, तो चलो 2 साथ कि जगह ले जाने:

arr[2] 

भी बस के रूप में यह लग रहा है है कि। 4& अपना पता लेता है, जो कि arr है, जो कि arr है, जो दो int एस ऑफसेट है।

&(arr[2]) - arr 

कि arr घटा देती है, तो आप arr है, जो दो int रों है से arr[2] की भरपाई के साथ छोड़ दिया कर सकें। तुम वहाँ जाओ।

Here's a reduced example.


मामले में आप यह 8, ठीक है, कि बस कैसे सूचक अंकगणित है होने की उम्मीद कर रहे थे। उन दोनों को कास्टिंग unsigned int रहे हैं:

(unsigned int)&arr[2] - (unsigned int)arr 

8 निकलेगा, एक int चार बाइट्स है कम से कम जब। (Demo)

5

"2" के प्रिंट मूल्य को कैसे निकाला जा सकता है यह दिखाने के लिए मिनीटेक के उत्तर को देखें।

हालांकि, मुझे लगता है कि आपके मामले में आप केवल गलत समझाते हैं कि & ऑपरेटर कैसे काम करता है। हां, arr[arr[1]-arr[4]]4 है, लेकिन इसका मतलब यह नहीं है कि &(arr[arr[1]-arr[4]])&4 कर रहा है; यह &(arr[2]) कर रहा है; और यह arr[2] का पता ले रहा है, arr[2] का मान नहीं, जो 4 है।

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