我不明白这个程序的输出:
int arr[]={1,7,4,2,5,8};
int x=(&(arr[arr[1]-arr[4]])-arr);
printf("%d" ,x);
Run Code Online (Sandbox Code Playgroud)
arr[arr[1]-arr[4]]等于4.这是什么意思&(4)?为什么打印2?
Ry-*_*Ry- 13
arr[1] - arr[4]
Run Code Online (Sandbox Code Playgroud)
这就像看起来一样.7 - 5 = 2,所以让我们用2以下代替:
arr[2]
Run Code Online (Sandbox Code Playgroud)
这也和它看起来一样.4.在&需要它的地址,这将在两个int从阵列,这是的开始偏移S arr.
&(arr[2]) - arr
Run Code Online (Sandbox Code Playgroud)
减去arr,所以你留下的偏移arr[2]距离arr,这是两个int秒.你去吧
如果你期望它8,那就是指针运算的方式.将它们都投射到unsigned int:
(unsigned int)&arr[2] - (unsigned int)arr
Run Code Online (Sandbox Code Playgroud)
将产生8,至少当a int是四个字节时.(演示)
看看minitech的答案,展示如何推断"2"的打印值.
但是,我认为在您的情况下,您只是误解了&运算符的工作原理.是的,arr[arr[1]-arr[4]]是的4,但这并不意味着这样&(arr[arr[1]-arr[4]])做&4; 它正在做&(arr[2]); 并且它采取的地址arr[2],而不是价值arr[2],这是4.
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |