我不明白這個程序的輸出:地址:(數量)
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
。 &
取其地址,這將是從陣列開始的兩個int
s偏移量,即arr
。
&(arr[2]) - arr
減去arr
,所以留給你的arr[2]
偏移從arr
,這是兩個int
秒。你走了。
如果你期待它是8
,好,這是指針運算是多麼的。他們都投射到unsigned int
:
(unsigned int)&arr[2] - (unsigned int)arr
將產生8
,至少當int
是四個字節。 (Demo)
請看minitech的答案,以顯示「2」打印值的推導方式。
但是,我認爲在你的情況下,你只是誤解了&
運營商如何工作。是的,arr[arr[1]-arr[4]]
是4
,但這並不意味着&(arr[arr[1]-arr[4]])
正在做&4
;它正在做&(arr[2])
;它的地址爲arr[2]
,而不是arr[2]
的值,即4
。