为什么下面的指针程序的输出为2?

问题描述 投票:0回答:1
#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。

c pointers pointer-arithmetic
1个回答
0
投票

当您从

p1
中减去
p2
时,即
(p2 - p1)
,您实质上是找到了它们内存地址之间的差异。由于两个指针都指向同一数组中的元素,因此它们的地址之间的差异表明它们在数组中相距多少个元素。所以,
p2 - p1
给你2,表示有2个整数(或元素,因为
int
,每个元素有4个字节)。

如果您想访问该值,可以通过

printf("%d",*p2-*p1);

来实现
© www.soinside.com 2019 - 2024. All rights reserved.