#include <stdio.h> int main() { int i; int *p1, *p2; p1 = &i + 1; p2 = &i; printf("%X\n", p2); printf("%X\n", p1); printf("%X\n", p1 - p2); printf("%X\n", (char*)p1-(char*)p2); }
p1和p2是两个指向整形的指针,因为在32位机器上,整形占4个字节,所以对于它们,加一操作,实际上是原地址加4(一个字节对应一个地址),所以p1-p2等于1。 当把p1和p2强转成char *型后,因为一个char占一个字节,所以p1-p2得出实际地址差,即4。
37,721
社区成员
34,239
社区内容
加载中
试试用AI创作助手写篇文章吧