我不明白这个程序的输出:
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,所以你留下了 from 的偏移量arr[2],arr即两个ints。你去吧。
如果您期望它是8,那么,指针算法就是这样。将它们都投射到unsigned int:
(unsigned int)&arr[2] - (unsigned int)arr
将 yield 8,至少当 anint是四个字节时。(演示)
查看 minitech 的答案,了解如何推断“2”的打印值。
但是,我认为在您的情况下,您只是误解了&操作员的工作方式。是的,arr[arr[1]-arr[4]]是4,但这并不意味着&(arr[arr[1]-arr[4]])正在做&4;它在做&(arr[2]);它取的是 的地址arr[2],而不是 的值arr[2],即4。