指针算术输出错误

Wal*_*ter 2 c pointers pointer-arithmetic

在下面的程序中,Here ptr已被声明为指向整数指针的指针并分配了数组的基址,该数组p[]已被声明为整数指针数组.假设ptr包含地址9016(假设p的起始地址是9016)在ptr递增之前和之后ptr++,它将包含值9020(假设int占用4个字节).

所以ptr-p应该将输出设为4即(9020-9016 = 4).但它输出为1.为什么?

#include<stdio.h>
int main()
{
    static int a[]={0,1,2,3,4};
    static int *p[]={a,a+1,a+2,a+3,a+4};
    int **ptr=p;
    ptr++;
    printf("%d",ptr-p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Yu *_*Hao 8

一个指针减去另一个指针的结果是它们之间的元素数,而不是字节数.

int **ptr=p;
ptr++;
Run Code Online (Sandbox Code Playgroud)

ptr向前移动一个元素,因此ptr - p具有值1.

顺便说一句,这种行为是一致的ptr++(ptr = p + 1;在你的例子中意味着).