#include <stdio.h>
void main() {
int arr[] = {10,20,30,40};
int *p1 = arr;
int *p2 = &arr[2];
printf("%d",p2-p1);
}
输出:2
我很惊讶地看到输出为 2。我不知道为什么输出是 2。
当您从
p1
中减去 p2
时,即 (p2 - p1)
,您实质上是找到了它们内存地址之间的差异。由于两个指针都指向同一数组中的元素,因此它们的地址之间的差异表明它们在数组中相距多少个元素。所以,p2 - p1
给你2,表示有2个整数(或元素,因为int
,每个元素有4个字节)。
如果您想访问该值,可以通过
printf("%d",*p2-*p1);
来实现