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)
一个指针减去另一个指针的结果是它们之间的元素数,而不是字节数.
int **ptr=p;
ptr++;
Run Code Online (Sandbox Code Playgroud)
ptr向前移动一个元素,因此ptr - p具有值1.
顺便说一句,这种行为是一致的ptr++(ptr = p + 1;在你的例子中意味着).