如何理解指针之间的字节数

int num, a[5] = {1, 2, 3, 4, 5};
int *p = a, *q; //指针p指向元素a[0]
q = p + 4; //相当于q = p + 4×sizeof(int),将q指向a[4]
num= q – p; //指针q和p之间的元素个数,值为4
num= (int)q – (int)p; //指针q和p之间的字节数,值为16
怎么样理解最后一行

q-p表示两个指针之间有多少个元素,不是内存大小。内存大小需要q-p再乘以指针类型的长度。
强行用(int)转换成整型后,q和p就丢失了指针的特性,只是一个整数而已,整数之间相减,自然就等于实际的地址只差了

一个int是4字节。
int *p = a; *q;
q = p+4;

是 指int 向后移动4位。所以 是4*4 = 16;