C++中指针指向的数组内存地址相减后的值?

请问为什么我p2-p1的内存地址后值是14(十六进制)但是我输出来的为什么是5呢?

img

因为p1、p2都是int *指针,占四个字节。a[1]-a[6]一共有6个整型变量,相隔5个数,估地址值相差0x14(转换成二进制为20)
指针相减是差量即20/4=5

哦,因为当指针指向的没有值的时候,就是地址减地址,6-1=5

因为p2和p1都是int类型的指针,两者相减的结果,表示两个指针地址之间有几个int型空间,不是字节数!。所以是5
如果改成(char*)p2 - (char*)p1,就是20了。
=================

没那么复杂,问你个问题:
int *p = 0x1234;
那么 p + 1 是多少?是01234 + 4
你在学习指针的时候应该经常碰到 这样 p + i 就相当于p[i]
指针p 的运算是类型字节数运算,对于int 来说 p + 1,指的是p 向后移动 4 个字节